小编典典
在许多情况下FileNotFoundException,运行时可能会引发a 。
命名文件不存在。原因可能有很多,其中包括:
路径名完全错误
路径名看起来正确,但实际上是错误的,因为它包含您没有注意到的非打印字符(或同形文字)
路径名是相对的,相对于正在运行的应用程序的实际当前目录,它不能正确解析。通常发生这种情况是因为应用程序的当前目录不是您期望或假定的目录。
该文件的路径已损坏;例如,路径的目录名称不正确,路径上的符号链接已损坏或路径组件之一存在权限问题。
命名文件实际上是一个目录。
由于某种原因,无法打开指定文件进行读取。
好消息是,问题将不可避免地是上述之一。只是确定哪一个问题。您可以尝试以下操作:
调用file.exists()将告诉您是否存在具有给定名称/路径名的文件系统对象。
调用file.isDirectory()将测试它是否是目录。
调用file.canRead()将测试该文件是否可读。
此行将告诉您当前目录是什么:
System.out.println(new File(".").getAbsolutePath());
此行将以某种方式打印出路径名,从而更容易发现意外的前导或训练性空白:
System.out.println("The path is '" + path + "'");
在输出中查找意外的空格,换行符等。
事实证明您的示例代码有一个编译错误。
我运行您的代码时并没有处理Netbeans的投诉,只是得到以下异常消息:
线程“主”中的异常java.lang.RuntimeException:无法编译的源代码-未报告的异常java.io.FileNotFoundException; 必须被抓住或宣布被抛出
如果将代码更改为以下代码,它将解决该问题。
public static void main(String[] args) throws FileNotFoundException {
File file = new File("scores.dat");
System.out.println(file.exists());
Scanner scan = new Scanner(file);
}
说明:Scanner(File)构造函数被声明为引发FileNotFoundException异常。(碰巧扫描程序无法打开文件。)现在FileNotFoundException是一个已检查的异常。这意味着可能引发异常的方法必须捕获异常或在throws子句中声明它。上面的修复采用了后一种方法。
2020-03-06