【问题标题】:PrintWriter is throwing FileNotFoundExceptionPrintWriter 正在抛出 FileNotFoundException
【发布时间】:2018-04-19 11:41:59
【问题描述】:

我有一个方法:

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)

它说错误在PrintWriter writer = ...的行中,该文件肯定存在。 (但这应该不是问题,不是吗?)。此方法适用于 ImageIcon 中的 .pngs,所以我不明白为什么会有任何不同。有人可以解释为什么这不起作用以及如何解决它吗?

【问题讨论】:

  • 您是否尝试将完整路径传递给File 对象?该文件在类路径中吗?
  • 和类在同一个目录下,不过我试试全路径。
  • 不,没用。
  • 你经过了哪条路?
  • 完整路径我的意思是C:/users/userX/.../save.txt。根据您的情况进行调整,然后重试

标签: java filenotfoundexception printwriter


【解决方案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)

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

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

(线索是假定的路径名​​以“file:”开头,并且它还包含一个 % 转义的空格。)

解决方案:

类似于以下之一...取决于 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 字符串。

【讨论】:

    【解决方案2】:

    根据要求,这有效:

    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();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-19
      • 2020-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多