web-dev-qa-db-ja.com

BufferedWriterを介して書き込まれる場合、FileWriterを閉じる必要はありますか?

以下のようにBufferedReaderを検討してください。

_writer = new BufferedWriter(new FileWriter(new File("File.txt"), true));
_

この場合、アプリケーションの最後で、writerwriter.close()で閉じています。

これで十分でしょうか? new FileWriter(new File("File.txt"), true)で作成されたFileWriterを閉じる必要はありませんか?

14
vivek_jonam

BufferedWriterは、ラップするライターを閉じる処理を行うため、閉じる必要はありません。

あなたを納得させるために、これはBufferedWriterのcloseメソッドのソースコードです:

public void close() throws IOException {
    synchronized (lock) {
        if (out == null) {
            return;
        }
        try {
            flushBuffer();
        } finally {
            out.close();
            out = null;
            cb = null;
        }
    }
}
15
sambe

すべてが別々のストリームであるため、開いている各ストリームを個別に閉じることをお勧めします。ネストされたストリームでエラーが発生した場合、ストリームは閉じられません。したがって、ネストされた各ストリームを排他的に閉じることをお勧めします。

詳細については、次のリンクを参照してください。

Javaでネストされたストリームとライターを閉じる正しい方法

3
Abhishek

はいwriter.close()は、基礎となるライター/ストリームも閉じます。

2
harsh

最も外側のストリームのみを閉じる必要があります。残りのストリームは一時的なものであり、自動的に閉じられます。ストリームを個別に作成してネストした場合、その場合は個々のストリームを閉じる必要があります。この質問もチェックしてください Javaでネストされたストリームとライターを閉じる正しい方法

0
Arpit