Java BufferedWriter, OutputStreamWriter, который в состоянии записать в закрытый FileOutputStream

Я ожидал, что следующий код выдаст исключение, когда я goto пишу данные в Поток:

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, но в моей текущей среде, для FileOutputStream может быть возможно быть закрытым, прежде чем BufferedWriter будет закрыт. Разве FileOutputStream не должен бросать IOException, который должен переместить цепочку вверх, пока он не поражает мой блок попытки/выгоды, и распечатайте отслеживание стека?

Если я пытаюсь назвать fs.write (65), то он выдает исключение.

8
задан Danubian Sailor 9 December 2013 в 07:47
поделиться

1 ответ

Попробуйте выполнить сброс после вызова записи. Буферизованный поток, возможно, еще не пытался записать контент в базовый поток и, следовательно, не осознавал, что базовый поток был закрыт.

РЕДАКТИРОВАТЬ:

Просто попробовал. С кодом:

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)
10
ответ дан 5 December 2019 в 17:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: