JavaのBufferedWriterの、閉じたFileOutputStreamに書き込みができるのOutputStreamWriter

StackOverflow https://stackoverflow.com/questions/2457571

質問

私は後藤ストリームにデータを書き込むときに例外をスローするには、次のコードを期待していた。

File file = new File("test.txt");
FileOutputStream fs = new FileOutputStream(file);
OutputStreamWriter ow = new OutputStreamWriter(fs);
BufferedWriter writer = new BufferedWriter(ow);

fs.close();

try {
    ow.write(65);
    writer.write("test");
} catch (Exception e) {
    e.printStackTrace();
}

私はBufferedWriterのを閉じる必要がありますが、BufferedWriterのが閉じられる前のFileOutputStreamをクローズするための私の現在の環境では、それは可能かもしれないことを実現します。 FileOutputStreamは、それが私のtry / catchブロックに当たるまで、チェーンを上に移動し、スタックトレースを印刷する必要がありIOExceptionが投げすべきではない?

私はfs.write(65)を呼び出すようにしようとすると、

、それは例外をスローします。

役に立ちましたか?

解決

書き込みコールの後に洗い流す試してみてください。バッファされたストリームは、まだ基になるストリームへコンテンツを書き込みしようとしていない、したがって、基になるストリームが閉じられたことに気づいていないかもしれません。

EDITます:

は、ちょうどそれを試してみました。コード付きます:

File file = new File("test.txt");
FileOutputStream fs = new FileOutputStream(file);
OutputStreamWriter ow = new OutputStreamWriter(fs);
BufferedWriter writer = new BufferedWriter(ow);

fs.close();

try {
    ow.write(65);
    writer.write("test");
    writer.flush();
} catch (Exception e) {
    e.printStackTrace();
}

次の例外を取得します:

java.io.IOException: Bad file descriptor
    at java.io.FileOutputStream.writeBytes(Native Method)
    at java.io.FileOutputStream.write(FileOutputStream.java:260)
    at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:202)
    at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:272)
    at sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:276)
    at sun.nio.cs.StreamEncoder.flush(StreamEncoder.java:122)
    at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:212)
    at java.io.BufferedWriter.flush(BufferedWriter.java:236)
    at Test.main(Test.java:16)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top