0

我正在用 Java 编写一个私有方法,该方法读取和写入一个简单的文本文件,如果它不存在,它应该创建它,因为 createNewFile() 首先检查它。

private boolean updateGameQuota(String name, String quantity) {
    ...
    File quotaLog = new File("seller-quotas.txt");
    quotaLog.createNewFile();
    ...
    return ret;
}

编译时错误是:SmsFunctions.java:256: error: unreported exception IOException; 必须被捕获或声明被抛出 quotaLog.createNewFile(); ^ 1 个错误

将它放在 try-catch 块中似乎不是问题,因为我尝试过(也在许多其他尝试传递 quotaLog 的行上),但最终我到了很明显其他地方出了问题的地步。File 对象很好,但是如果我尝试使用 createNewFile 或说

FileReader sQReader = new FileReader(quotaLog);

即使该文件肯定存在,我也会收到 FileNotFoundException,并且我在其他文本文件上尝试了此操作,这些文本文件在其他地方成功读取,结果相同。

任何帮助或想法将不胜感激!

更新:所以最后我的问题确实只是在所有内容周围放置 try-catch 块,并确保在其中设置的变量首先在这些块之外创建。我的困惑来自于一种错误的确定感,即 fileraders/filewriters 不应该需要 try catch 块(我可以发誓我没有多次使用它们),而这个错误实际上是其他事情的迹象。也许在关闭线程之前,有人可以详细说明为什么 Java 并不总是对此大惊小怪,如果这是真的?

谢谢!

4

1 回答 1

1

File.createNewFile()可以抛出 IOException (已检查异常)并且需要被包围在 try-catch 块中,或者您使用它的方法需要声明为throws IOException并且您需要在上游处理它。

要调试 FileNotFoundException,您可以尝试:

File quotaLog = new File("seller-quotas.txt");
System.out.println(quotaLog.getAbsolutePath());

它使用该File.getAbsolutePath()方法打印它期望文件存在的位置。

于 2013-04-01T16:41:29.713 回答