PrintWriter正在抛出FileNotFoundException

时间:2018-04-19 11:42:00

标签: java filenotfoundexception printwriter

我有一个方法:

nbproject/private

它抛出了这个错误:

try {
    PrintWriter writer = new PrintWriter(new File(getResource("save.txt").toString()));

    writer.println("level:" + level);
    writer.println("coins:" + coins);

    writer.close();
} catch (FileNotFoundException e) {
    e.printStackTrace();
}

它表示错误与java.io.FileNotFoundException: file:/Users/lpasfiel/Desktop/Java%20Games/Jumpo/out/production/Jumpo/com/salsagames/jumpo/save.txt (No such file or directory) at java.io.FileOutputStream.open0(Native Method) at java.io.FileOutputStream.open(FileOutputStream.java:270) at java.io.FileOutputStream.<init>(FileOutputStream.java:213) at java.io.FileOutputStream.<init>(FileOutputStream.java:162) at java.io.PrintWriter.<init>(PrintWriter.java:263) at com.salsagames.jumpo.Variables$Methods.save(Variables.java:49) 一致。文件肯定存在。 (但这应该不是问题,是吗?)。这个方法适用于ImageIcon中的PrintWriter writer = ...,所以我不明白为什么它会有所不同。有人可以解释为什么这不起作用以及如何解决它?

2 个答案:

答案 0 :(得分:1)

让我们仔细看看这一行:

java.io.FileNotFoundException: file:/Users/lpasfiel/Desktop/Java%20Games/Jumpo/out/production/Jumpo/com/salsagames/jumpo/save.txt (No such file or directory)

如果您查看FileNotFoundException的其他示例,您会注意到典型的消息如下所示:

java.io.FileNotFoundException: /some/path/to/file.txt (No such file or directory)

java.io.FileNotFoundException: dir/file.txt (No such file or directory)

简而言之,找不到典型的&#34;文件&#34; message以绝对或相对文件路径名开头。但在您的示例中,该消息显示了一个&#34;文件:&#34; URL。

我认为 是问题所在。我认为您使用URL字符串而不是路径名创建了FileFile构造函数不检查此 1 ,但是当您尝试实例化FileWriter时,操作系统会抱怨它无法找到具有该路径名的文件

(线索是假定的路径名​​以&#34;文件:&#34;开头,并且它还包含一个%-escaped空格。)

解决方案:

类似以下内容之一...取决于getResource()返回的内容。

  File file = new File(getResource("save.txt").toURI());
  PrintWriter writer = new PrintWriter(file);

  PrintWriter writer = new PrintWriter(getResource("save.txt").openStream());

1 - 它不应该。 URL字符串实际上是语法上有效的路径名。由于允许File表示文件系统中不存在的文件路径,因此File构造函数没有依据拒绝URL字符串。 < / p>

答案 1 :(得分:0)

根据要求,这有效:

try {
    PrintWriter writer = new PrintWriter(new File(getResource("save.txt").toURI()));

    writer.println("level:" + level);
    writer.println("coins:" + coins);

    writer.close();
} catch (FileNotFoundException | URISyntaxException e) {
    e.printStackTrace();
}