Java 为什么新文件()不应该放在try块中,而新文件读取器(“input.txt”)应该放在try块中?

Java 为什么新文件()不应该放在try块中,而新文件读取器(“input.txt”)应该放在try块中?,java,Java,我正在学习如何用java读取文件。这种差异困扰着我。我认为有一个明显的区别,我不太清楚 File inputFile = new File("input.txt"); // is perfect fine even if input.txt doesn't exist. Why? // but FileReader fr = new FileReader("input.txt"); // should be put into try.. catch block?? or compiler er

我正在学习如何用java读取文件。这种差异困扰着我。我认为有一个明显的区别,我不太清楚

File inputFile = new File("input.txt");
// is perfect fine even if input.txt doesn't exist. Why?

// but
FileReader fr = new FileReader("input.txt");
// should be put into try.. catch block?? or compiler error

因为
newfilereader(“文件”)
会抛出选中的异常
FileNotFoundException
,而
newfilereader(“文件”)
不会


请注意,
newfile
不会检查文件是否实际存在,而
FileReader
会检查。

因为
newfilereader(“文件”)
会抛出选中的异常
FileNotFoundException
其中
newfile(“文件”)
不会

请注意,
newfile
不会检查文件是否实际存在,而
FileReader
会检查文件是否存在。

因为它只是一个表示文件名的对象:

文件和目录路径名的抽象表示

而a是用于读取文件内容的开放资源,并实现:

不再需要时必须关闭的资源

因为它只是一个表示文件名的对象:

文件和目录路径名的抽象表示

而a是用于读取文件内容的开放资源,并实现:

不再需要时必须关闭的资源


文件(“input.txt”)
尚未提交到实际文件。因此,您可以测试该文件是否存在,或者在以后打开该文件进行写入。而
FileReader(“input.txt”)
实际上试图打开命名文件进行读取,因此可能引发异常。

文件(“input.txt”)
尚未提交到实际文件。因此,您可以测试该文件是否存在,或者在以后打开该文件进行写入。而
FileReader(“input.txt”)
实际上试图打开命名文件进行读取,因此可能会引发异常。

技术原因是一个构造函数引发非运行时异常,而另一个构造函数则不会


为什么呢?可能是因为File类只是围绕文件系统路径名的抽象。文件是否存在于该路径并不重要。FileReader封装实际文件系统对象上的读取操作,并在文件不存在或无法打开读取时引发异常。

技术原因是一个构造函数引发非运行时异常,而另一个构造函数则不会

为什么呢?可能是因为File类只是围绕文件系统路径名的抽象。文件是否存在于该路径并不重要。FileReader封装实际文件系统对象上的读取操作,如果文件不存在或无法打开读取,则引发异常