Question

Je me attendais le code suivant pour lancer une exception quand je goto écrire des données sur le flux:

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

Je me rends compte que je ferme la BufferedWriter, mais dans mon environnement actuel, il peut être possible pour le FileOutputStream à fermer avant la BufferedWriter est fermée. Ne doit pas être FileOutputStream lancer une IOException qui devrait remonter la chaîne jusqu'à ce qu'elle touche mon bloc try / catch et imprimer la trace de la pile?

Si je tente d'appeler fs.write (65), il jette une exception.

Était-ce utile?

La solution

Essayez de rinçage après l'appel d'écriture. Le flux tampon pourrait ne pas avoir essayé d'écrire encore le contenu du flux sous-jacent, et donc pas rendu compte que le flux sous-jacent a été fermé.

EDIT:

juste essayé. Avec le 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();
}

vous obtenez l'exception suivante:

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)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top