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


123

虽然java.io.RandomAccessFile有一种close()方法java.io.File没有。这是为什么?文件在完成后会自动关闭吗?

谢谢!


3
如果您研究Java API,将能够立即获得答案。
gigadot 2011年

43
我知道人们比其他精湛的Java规范更有帮助。
阿不思·邓布利多

6
b / c它无法打开:)
bestsss 2011年

6
因为它没有打开任何东西。人们远没有官方Java规范可靠。
2014年

Answers:


141

File该类的javadoc将类描述为:

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

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

(我个人的看法是,不幸的是Sun后来继续创建RandomAccessFile,给命名不一致带来了很大的困惑。)


72

java.io.File不代表打开的文件,而是代表文件系统中的路径。因此,close对其进行处理没有任何意义。

实际上,该类是由库作者错误命名的,应称为Path


但是,所有目录列表方法又如何呢?他们应该Path完全分开。
biziclop 2011年

3
同意但在任何情况下,File或RandomAccessFile均被错误命名。像RandomAccessFileStream这样的东西可能会更好,但是现在已经太晚了。
maaartinus 2011年

7
“实际上,该类是由库作者错误命名的,应该称为Path之类的东西”->他们听到了您的声音。在nio(新I / O)包中,相似的类现在命名为Path。docs.oracle.com/javase/7/docs/api/java/nio/file/Path.html
分钟

6

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


1
是。我从没看过java.io.RandomAccessFile。我一直以为它会覆盖java.io.File,但事实并非如此!文件表示路径。RandomAccessFile是一个对象,它可以像流一样执行磁盘I / O,尽管实现方式大不相同,但允许随机访问而不是流访问。
史蒂夫·科恩

6

可以打开和关闭BufferedReader,但从不打开File,它仅表示文件系统中的路径。


4

假设您有

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

您无需关闭Files,因为它只是路径的表示。

您应该始终考虑仅关闭读取器/写入器以及实际上的流。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.