2010-12-10 28 views
18

Actualmente estoy escribiendo una aplicación que produce varios archivos de registro usando BufferedWriter. Sin embargo, durante la depuración, deseo escribir en System.out en lugar de en un archivo. Pensé que podría cambiar a partir de:Cómo escribir en la salida estándar utilizando BufferedWriter

log = new BufferedWriter(new FileWriter(tokenizerLog)); 

a:

BufferedWriter log = new BufferedWriter(new OutputStreamWriter(System.out)); 
log.write("Log output\n"); 

en contraposición a:

System.out.println("log output") 

La nueva opción OutputStreamWriter no ha estado trabajando sin embargo. ¿Cómo cambio solo el objeto dentro del constructor BufferedWriter para redireccionar desde un archivo a la salida estándar? Porque tengo varios archivos de registro en los que escribiré, usando System.out en todas partes y cambiar el resultado a un archivo no es realmente una opción.

Respuesta

28

Su enfoque funciona, se le acaba olvidando para enjuagar la salida:

try {  
    BufferedWriter log = new BufferedWriter(new OutputStreamWriter(System.out)); 

    log.write("This will be printed on stdout!\n"); 
    log.flush(); 
} 
catch (Exception e) { 
    e.printStackTrace(); 
} 

El tanto OutputStreamWriter y PrintWriter son Writer casos por lo que sólo puede hacer algo como:

BufferedWriter log; 

Writer openForFile(String fileName) { 
    if (fileName != null) 
    return new PrintWriter(fileName); 
    else 
    return new OutputStreamWriter(System.out); 
} 

log = new BufferedWriter(openForFile(null)); //stdout 
log = new BufferedWriter(openForFile("mylog.log")); // using a file 

o lo que sea , es solo para darle la idea ..

2

Como mencionó que esto es para el registro, es posible que desee consultar el uso una biblioteca de registradores como log4j. Te permitirá cambiar el destino del registro (ya sea el archivo de registro o la consola) haciendo cambios solo en los archivos de configuración.

Cuestiones relacionadas