我正在用Java编写一个私有方法来读取和写入一个简单的文本文件,如果它不存在,它应该创建,因为createNewFile()会先检查它。
private boolean updateGameQuota(String name, String quantity) {
...
File quotaLog = new File("seller-quotas.txt");
quotaLog.createNewFile();
...
return ret;
}
编译时错误是:SmsFunctions.java:256:错误:未报告的异常IOException;必须被抓住或宣布被抛出 quotaLog.createNewFile(); ^ 1错误
将它放在try-catch块中似乎不是问题,因为我尝试过(也尝试传递quotaLog的许多其他行)但最终我明白了其他错误的地方。 File对象很好,但是如果我尝试使用createNewFile或者说
FileReader sQReader = new FileReader(quotaLog);
我得到一个FileNotFoundException,即使该文件肯定存在,我在其他文本文件上尝试了这个,这些文件在其他地方成功读取并具有相同的结果。
非常感谢任何帮助或想法!
更新: 所以最后我的问题确实只是把try-catch块放在所有东西上,并确保首先在这些块之外创建设置的变量。我的困惑来自于一种错误的认识,即文件编制者/文件编写者不需要尝试捕获块(我可以发誓我已经多次使用它们)并且错误实际上是其他东西的指示。 也许在关闭线程之前,有人可以详细说明为什么Java并不总是对此大惊小怪,如果这是真的?
谢谢!
答案 0 :(得分:1)
File.createNewFile()
可以抛出一个IOException(一个已检查的异常)并且需要在try-catch块中包围,或者你正在使用它的方法需要声明为throws IOException
并且你需要在上游处理它。
要调试FileNotFoundException,您可以尝试:
File quotaLog = new File("seller-quotas.txt");
System.out.println(quotaLog.getAbsolutePath());
使用File.getAbsolutePath()
方法打印文件存在的位置。