Pregunta

Yo estaba esperando el siguiente código para lanzar una excepción cuando Goto escribir datos en la Corriente:

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

Me doy cuenta que debe cerrar la BufferedWriter, pero en mi entorno actual, puede ser posible que el FileOutputStream que se cierre antes de que el BufferedWriter está cerrado. no debe ser el FileOutputStream lanzando una IOException que debe avanzar en la cadena hasta que llega a mi bloque try / catch e imprimir el seguimiento de la pila?

Si trato de llamar fs.write (65), entonces se produce una excepción.

¿Fue útil?

Solución

Trate de lavado después de la llamada de escritura. La corriente tamponada podría no haber tratado de escribir el contenido de la corriente subyacente, sin embargo, y por lo tanto no se dio cuenta de que la corriente subyacente se cerró.

EDIT:

Sólo probado. Con el código:

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

se obtiene la siguiente excepción:

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)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top