虽然 java.io.RandomAccessFile有一个 close()方法,但是 java.io.File没有。为什么?文件是否在终结时自动关闭?
java.io.RandomAccessFile
close()
java.io.File
java.io.File不表示 打开文件,它表示文件系统中的路径。因此,在它上面使用 close方法是没有意义的。
close
实际上,这个类被库作者错误地命名了,它应该被称为类似于 Path的东西。
Path
File类的 javadoc 将该类描述为:
File
文件和目录路径名的抽象表示。
File只是一个路径名的表示,只有几个关于文件系统(如 exists())和目录处理的方法,但是实际的流输入和输出是在其他地方完成的。流可以打开和关闭,文件不能。
exists()
(我个人的观点是,相当不幸的是,Sun 随后又创建了 RandomAccessFile,造成了与其不一致的命名相混淆。)
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();