【问题标题】:Java PrintWriter FileNotFoundJava PrintWriter FileNotFound
【发布时间】:2015-04-18 18:07:09
【问题描述】:

我在写入 txt 文件时遇到问题。我收到 FileNotFound 异常,但我不知道为什么,因为文件肯定在那里。这是代码。

import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.io.File;

public class Save
{
    public static void main(String[] args)
    {
        File file = new File("C:/Users/Daniel/Desktop/Programs/Save Data Test/save.txt");
        PrintWriter pw = new PrintWriter(file);
        pw.println("Hello World");
        pw.close();
    }
}

【问题讨论】:

  • 您的代码无法编译 - PrintWriter 会抛出需要处理的 FileNotFoundException
  • 上面的代码甚至无法编译。所以你不可能得到一个例外。
  • 您的标题实际上只是标签。请将其更新为对您的问题的简短、有意义的描述。请参阅How to Ask 了解更多信息。

标签: java file printwriter


【解决方案1】:

在创建PrintWriter put 之前,您必须使用其目录创建实际文件

file.mkdirs();
file.createNewFile();

将它与适当的 try 和 catch 块一起使用会看起来像这样......

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.File;

public class Save
{
    public static void main(String[] args)
    {
        File file = new File("save.txt");
        try {
            file.mkdirs();
            file.createNewFile();
        } catch (IOException e1) {
            e1.printStackTrace();
        }
        try {
            PrintWriter pw = new PrintWriter(file);
            pw.println("Hello World");
            pw.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }

    }
}

【讨论】:

  • 提问者说“文件最肯定在那里”,意思是这个解决不了。
  • 错误。根据 Java 文档,File 参数是“用作此编写器目标的文件。如果文件存在,则将其截断为零大小;否则,将创建一个新文件。输出将被写入文件并被缓冲。” Java 8 PrintWriter
【解决方案2】:

仅仅因为您知道文件在那里,并不意味着您的代码不应该在尝试处理之前检查它的存在。

就您的 FileNotFound 异常而言,如果 IDE 检测到可能发生异常,一些(如果不是全部)Java IDE 会强制您编写 try/catch 块。

以 NetBeans 为例,代码甚至无法编译:

您必须编写一个 try/catch 块来处理潜在的异常

public static void main(String[] args) {
    File file = new File("C:/Users/Daniel/Desktop/Programs/Save Data Test/save.txt");
    if (file.exists()) {
        try {
            PrintWriter pw = new PrintWriter(file);
            pw.println("Hello World");
            pw.close();
        } catch (FileNotFoundException fnfe){
            System.out.println(fnfe);
        }
    }
}

【讨论】:

  • 你不需要在 println() 之后 close();
猜你喜欢
  • 2016-06-05
  • 1970-01-01
  • 1970-01-01
  • 2011-02-12
  • 1970-01-01
  • 1970-01-01
  • 2011-08-11
  • 2015-12-24
相关资源
最近更新 更多