Domanda

Mi aspettavo il seguente codice per generare un'eccezione quando ho goto scrivere i dati della Corrente:

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

Mi rendo conto che avrei dovuto chiudere la BufferedWriter, ma nel mio ambiente attuale, può essere possibile per il FileOutputStream da chiudere prima che la BufferedWriter è chiuso. Non dovrebbe il FileOutputStream essere gettando un'IOException, che dovrebbe risalire la catena fino a raggiungere il mio blocco try / catch e stampare la traccia dello stack?

Se provo a chiamare fs.write (65), quindi viene generata un'eccezione.

È stato utile?

Soluzione

Prova il lavaggio dopo la chiamata di scrittura. Il flusso tamponata non avrebbe cercato di scrivere il contenuto al flusso sottostante ancora, e quindi non capito che il flusso sottostante chiusa.

EDIT:

appena provato. Con il codice:

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

si ottiene la seguente eccezione:

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)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top