我有一个方法:
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 = ...
,所以我不明白为什么它会有所不同。有人可以解释为什么这不起作用以及如何解决它?
答案 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字符串而不是路径名创建了File
。 File
构造函数不检查此 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();
}