为什么 java.io.File 没有 close 方法?

虽然 java.io.RandomAccessFile有一个 close()方法,但是 java.io.File没有。为什么?文件是否在终结时自动关闭?

187044 次浏览

java.io.File不表示 打开文件,它表示文件系统中的路径。因此,在它上面使用 close方法是没有意义的。

实际上,这个类被库作者错误地命名了,它应该被称为类似于 Path的东西。

File类的 javadoc 将该类描述为:

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

File只是一个路径名的表示,只有几个关于文件系统(如 exists())和目录处理的方法,但是实际的流输入和输出是在其他地方完成的。流可以打开和关闭,文件不能。

(我个人的观点是,相当不幸的是,Sun 随后又创建了 RandomAccessFile,造成了与其不一致的命名相混淆。)

本质上是随机访问文件包装输入和输出流,以便管理随机访问。不是打开和关闭文件,而是打开和关闭文件的流。

BufferedReader 可以打开和关闭,但 File 永远不会打开,它只是表示文件系统中的一个路径。

假设你有

File f  = new File("SomeFile");
f.length();

您不需要关闭 File,因为它只是路径的表示。

您应该始终考虑只关闭读取器/写入器,实际上应该关闭流。

如前所述,文件类 没有闭合方法只是实际文件的路径或引用。

您通常使用这个 File 类作为帮助器,用可以关闭的 FileReader 类打开实际的文件。也就是说,如果您从程序中读取一个文件,然后尝试在外部对该文件执行某些操作,那么它在退出 但是时会自动关闭,这可能会导致该外部调用出现错误,因此最好关闭它

File path = new File(/some/path/file.txt);
FileReader actualFile = new FileReader(path);
...<
if(imDoneWithTheFile)
actualFile.close();