java.io.Fileにclose()メソッドがないのはなぜですか?


123

一方でjava.io.RandomAccessFile持っているclose()方法をjava.io.Fileありません。何故ですか?ファイルはファイナライズなどで自動的に閉じられますか?

ありがとう!


3
Java APIを調べれば、すぐに答えを得ることができます。
ギガドット2011年

43
他の点では優れたJava仕様よりも人々の方が役立つことを学びました。
アルバスダンブルドア2011年

6
b / c開くことはできません:)
bestsss 2010年

6
何も開かないからです。そして、人々はかなりある少なく信頼性が公式のJava仕様より。
ローン侯爵、2014

回答:


141

Fileクラスのjavadocは、クラスを次のように説明します。

ファイルとディレクトリのパス名の抽象的な表現。

File はパス名の表現にすぎず、ファイルシステムに関するいくつかのメソッド( exists())とディレクトリ処理が、実際のストリーミング入出力は別の場所で行われます。ストリームは開いたり閉じたりできますが、ファイルはできません。

(私の個人的な意見では、Sunがを作成し続けたのはかなり不幸でありRandomAccessFile、その一貫性のない命名と多くの混乱を引き起こしています。)


72

java.io.File開いているファイルを表すのではなく、ファイルシステム内のパスを表します。したがってclose、それにメソッドがあることは意味がありません。

実際、このクラスはライブラリの作者によって誤った名前が付けられていましたPath


しかし、その後、すべてのディレクトリリストメソッドについてはどうでしょうか。それらはPath完全に分離されているはずです。
biziclop 2011年

3
同意しましたが、いずれにしても、FileまたはRandomAccessFileのいずれかの名前が誤っています。RandomAccessFileStreamのようなものの方が良いかもしれませんが、今では何年も遅すぎます。
maaartinus 2011年

7
「実際には、このクラスはライブラリの作成者によって誤った名前が付けられています。パスのような名前にする必要があります」->彼らはあなたの言うことを聞きました。nio(新しいI / O)パッケージでは、同様のクラスの名前がPathになりました。docs.oracle.com/javase/7/docs/api/java/nio/file/Path.html
mins

6

基本的にランダムアクセスファイルは、ランダムアクセスを管理するために入力ストリームと出力ストリームをラップします。ファイルを開いたり閉じたりするのではなく、ファイルへのストリームを開いたり閉じたりします。


1
はい。私はjava.io.RandomAccessFileを詳しく調べたことはありません。私はいつもそれがjava.io.Fileをオーバーライドすると思っていましたが、そうではありません!。ファイルはパスを表します。RandomAccessFileは、ストリームアクセスではなくランダムアクセスを許可するために、実装が大きく異なりますが、ストリームと同様にディスクI / Oを実行できるオブジェクトです。
スティーブコーエン

6

BufferedReaderは開いたり閉じたりできますが、ファイルは開かれず、ファイルシステム内のパスを表すだけです。


4

たとえば、あなたが持っているとしましょう

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

Fileはパスを表すだけなので、sを閉じる必要はありません。

リーダー/ライターと実際にはストリームのみを閉じることを常に考慮する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.