いclose()の両方FileReaderとBufferedReader?
-
21-09-2019 - |
質問
いくつかについて触れたいと思い現地のファイルを使用BufferedReader巻FileReader:
BufferedReader reader = new BufferedReader(new FileReader(fileName));
// read the file
// (error handling snipped)
reader.close();
せる必要があり close()
の FileReader
としても、ラッパーを扱う。私は見るコードが何かのようになります:
FileReader fReader = new FileReader(fileName);
BufferedReader bReader = new BufferedReader(fReader);
// read the file
// (error handling snipped)
bReader.close();
fReader.close();
このメソッドが呼び出されるから、サーブレットといいなと思っていく思わせて取り扱うオープン。
解決
no.
BufferedReader.close()
デフォルトの実装ではfalseを返 にjavadocのための BufferedReader や InputStreamReader
など
FileReader.close()
います。
他のヒント
他の人が指摘したように、あなただけの外側のラッパーを閉じる必要があります。
BufferedReader reader = new BufferedReader(new FileReader(fileName));
BufferedReader
コンストラクタが例外を投げた場合、これは(例えばOutOfMemoryError
)ファイルハンドルをリークすることができることを非常にスリムなチャンスがあります。あなたのアプリがこの状態にある場合は、あなたのクリーンアップをする必要がありますどのように慎重に、それはあなたがリソースのOSを奪うしません、それは他のプログラムに割り当てるかもしれないということですか重要に依存する場合があります。
閉鎖可能のインタフェースを使用することができますラッパーのコンストラクタは、Java 5または6で失敗する可能性がある場合:
Reader reader = new FileReader(fileName);
Closeable resource = reader;
try {
BufferedReader buffered = new BufferedReader(reader);
resource = buffered;
// TODO: input
} finally {
resource.close();
}
のJava 7のコードは、ののtry-と資源のパターンを使用する必要があります
try (Reader reader = new FileReader(fileName);
BufferedReader buffered = new BufferedReader(reader)) {
// TODO: input
}
BufferedReaderのソースによると、この場合には、コールがとても技術的にはあなたが後者を呼び出す必要はありませんfReader.close bReader.closeます。
BufferedReaderののショーのためのソースコード、そのあなたはBufferedReaderのを閉じたときに閉じている根底ます。
ソースコードを確認したところ、次の例が見つかりました。
FileReader fReader = new FileReader(fileName);
BufferedReader bReader = new BufferedReader(fReader);
close() メソッド バッファリーダー オブジェクトは、次の抽象 close() メソッドを呼び出します。 読者 最終的に実装されたメソッドを呼び出すクラス 入力ストリームリーダー クラスを閉じます。 入力ストリーム 物体。
したがって、bReader.close() のみで十分です。
あなたが使用できるJava 7から始まっのtry-と、リソースステートメントの
try (BufferedReader br = new BufferedReader(new FileReader(path))) {
return br.readLine();
}
BufferedReader
インスタンスが試し-とリソース文で宣言されているので、、それは関係なく、try文は正常または中途完了したかどうかの閉じられます。あなたはとてもfinally
文でそれを自分で閉じる必要はありません。 (これはまた、ネストされたリソース・ステートメントの場合の)
このリソースとの仕事にrecomanded方法です、マニュアルを参照してくださいのより詳細な情報については、
あなただけのBufferedReaderのすなわちreader.closeを(閉鎖する必要があります)、それは罰金を動作します。
私は遅れてんだけど、
BufferReader.javaます:
public BufferedReader(Reader in) {
this(in, defaultCharBufferSize);
}
(...)
public void close() throws IOException {
synchronized (lock) {
if (in == null)
return;
try {
in.close();
} finally {
in = null;
cb = null;
}
}
}
す な 必要に包まれたリーダ/ライター。
また、新Reader.close()
,Writer.close()
いだし見る Reader.close()
う:
ストリームを閉じ、システムリソースが関連付けられています。
るということを"システムリソースリリース 関連する としながら学んでいきます。なの確認..これまでよりも速やかに続開始来ます。場 Writer.close()
するとともに閉じます。
この場合には、弊社をご参照 OpenJDK みのソースコード。
でBufferedWriter 線265 だ out.close()
.これにより閉館す。で、地下鉄からも近くて便利。お探しの場合は、クラス用のスパイラル破壊部隊入"out
"いのコンストラクタで 線87 その out
のライターのクラスをラップでの通話は別のコンストラクタを提供 out
パラメータで out
変数..
いです。うか?まで同様のコードで BufferedReader線514, BufferedInputStream線468 や InputStreamReader線199.その他わからないこなすうことになったと言われています。