¿Qué usar en lugar de PrintWriter?

Aquí está mi código que tengo, que es bastante simple y va al grano:

public void sendMessage(String message)
{
    writer.println(message);
    writer.flush();
}

Realmente no me gusta usar PrintWriter porque tiende a tragar IOExceptions, esto es realmente lo único que lo estoy usando además de enviar matrices de bytes. ¿Qué puedo usar en su lugar que no consuma IOExceptions y aún me brinde la funcionalidad de PrintWriter?

preguntado el 04 de julio de 12 a las 05:07

¿Qué parte de la funcionalidad necesita? ¿Linea de alimentación? ¿Formatear? ¿Lavado automático? -

Creo que no hay nada que no se trague IOExceptions. if try/catch

@mulax: no se queja de eso lanzamiento excepciones, es que no se lanzar excepciones - tienes que consultar usando checkError(). -

Pensé, no consumiré == no arrojaré -

@mulax en términos generales ... lanzando una excepción produce una excepción - consumir es lo contrario de producir. ¡No consumirá! = No arrojará. (En realidad, estamos un poco sueltos sin terminología aquí. Estrictamente hablando, deberíamos estar hablando de excepciones que se propagan o se detectan). -

2 Respuestas

Recomiendo usar un llano Writer o con una BufferedWriter

public void writeMessage(BufferedWriter bw, String message) throws IOException {
    bw.write(message);
    bw.newline();
    bw.flush();
}

or

public void writeMessage(Writer writer, String message) throws IOException {
    writer.write(message);
    writer.write(System.lineSeparator());
    writer.flush();
}

Pero obviamente depende de qué funcionalidad de PrintWriter desea retener.

Respondido 04 Jul 12, 05:07

¿Tienden Writer y/o BufferedWriter a suprimir IOExcepitons? - John

No. Lea los javadocs: docs.oracle.com/javase/6/docs/api/java/io/BufferedWriter.html Encontraría que el método write() lanza IOException - Sujay

De hecho, todos los métodos en ambas versiones pueden generar IOException. - Stephen C

Si desea conservar PrintWriter y, sin embargo, comprobar si se ha producido alguna excepción, puede utilizar el método checkError() de PrintWriter para hacerlo. Por ejemplo, usando su propio código:

public void sendMessage(String message)
{
    try{
        writer.println(message);
    }finally{
           //checkError flushes the stream if it's not closed and checks its error state.
        if(writer.checkError()){ 
            //Your error handling code here
        }
    }
}

La otra forma sería usar BufferedReader como @Thilo había sugerido en su comentario. De nuevo, dependería de las funcionalidades que desee conservar.

En caso de que use una instancia de BufferedWriter, tendría que trabajar con los métodos write(), que arrojan IOException. Lea más sobre ellos en los javadocs aquí

Respondido 04 Jul 12, 05:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.