Frage

Ich habe den folgenden Code erwartet eine Ausnahme zu werfen, wenn ich Schreibdaten an den Stream-Navigation:

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();
}

Ich weiß, dass ich die BufferedWriter schließen soll, aber in meiner aktuellen Umgebung, kann es möglich sein, dass die Outputstream geschlossen werden, bevor die BufferedWriter geschlossen ist. Sollte nicht die Outputstream eine IOException werfen, die die Kette bewegen sollen, bis es meine try / catch-Block trifft und den Stack-Trace drucken?

Wenn ich Anruf fs.write versuchen (65), dann wirft er eine Ausnahme.

War es hilfreich?

Lösung

Versuchen Sie nach dem Schreibaufruf Spülung. Der gepufferte Strom nicht versucht habe den Inhalt an den zugrunde liegenden Stream zu schreiben, noch, und somit nicht erkannt, dass der zugrunde liegende Stream geschlossen wurde.

EDIT:

habe gerade versucht es. Mit dem Code:

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();
}

Sie die folgende Ausnahme erhalten:

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)
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top