我期待以下代码抛出异常时我转到数据写入流:

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中被抛出一个IOException,直到遇到我的try / catch块应该向上移动链条和打印堆栈跟踪?

如果我尝试调用fs.write(65),然后将其抛出异常。

有帮助吗?

解决方案

尝试写入呼叫后冲洗。所缓冲的流可能不试图写的内容到底层流又,因此没有意识到基础流被关闭。

编辑:

只要尝试过。用的代码:

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