Saltar al contenido

Cómo escribir la salida de la consola en un archivo txt

Esta inquietud se puede resolver de diversas formas, sin embargo te enseñamos la resolución más completa para nosotros.

Solución:

Necesitas hacer algo como esto:

PrintStream out = new PrintStream(new FileOutputStream("output.txt"));
System.setOut(out);

La segunda afirmación es la key. Cambia el valor de la supuesta “final” System.out attribute para ser el valor de PrintStream proporcionado.

Hay métodos análogos (setIn y setErr) para cambiar la entrada estándar y los flujos de error; referirse a java.lang.System javadocs para más detalles.

Una versión más general de lo anterior es esta:

PrintStream out = new PrintStream(
        new FileOutputStream("output.txt", append), autoFlush);
System.setOut(out);

Si append es true, la transmisión se agregará a un archivo existente en lugar de truncarlo. Si autoflush es trueel búfer de salida se vaciará cada vez que un byte array está escrito, uno de los println se llama métodos, o un n está escrito.


Solo me gustaría agregar que generalmente es una mejor idea usar un subsistema de registro como Log4j, Logback o el subsistema estándar Java java.util.logging. Estos ofrecen un control de registro detallado a través de archivos de configuración de tiempo de ejecución, soporte para archivos de registro continuos, fuentes para el registro del sistema, etc.

Alternativamente, si no está “registrando”, considere lo siguiente:

  • Con shells típicos, puede redirigir la salida estándar (o el error estándar) a un archivo en la línea de comandos; p.ej

    $ java MyApp > output.txt   
    

    Para obtener más información, consulte un tutorial de shell o una entrada manual.

  • Puede cambiar su aplicación para usar un out flujo pasado como un parámetro de método o a través de un singleton o inyección de dependencia en lugar de escribir en System.out.

Cambiando System.out puede causar sorpresas desagradables para otro código en su JVM que no espera que esto suceda. (Una biblioteca de Java correctamente diseñada evitará depender de System.out y System.errpero podrías tener mala suerte.)

No hay necesidad de escribir ningún código, solo en cmd en la consola puedes escribir:

javac myFile.java
java ClassName > a.txt

Los datos de salida se almacenan en el archivo a.txt.

para preservar la salida de la consola, es decir, escribir en un archivo y también mostrarlo en la consola, podría usar una clase como:

    public class TeePrintStream extends PrintStream 
        private final PrintStream second;

        public TeePrintStream(OutputStream main, PrintStream second) 
            super(main);
            this.second = second;
        

        /**
         * Closes the main stream. 
         * The second stream is just flushed but not closed.
         * @see java.io.PrintStream#close()
         */
        @Override
        public void close() 
            // just for documentation
            super.close();
        

        @Override
        public void flush() 
            super.flush();
            second.flush();
        

        @Override
        public void write(byte[] buf, int off, int len) 
            super.write(buf, off, len);
            second.write(buf, off, len);
        

        @Override
        public void write(int b) 
            super.write(b);
            second.write(b);
        

        @Override
        public void write(byte[] b) throws IOException 
            super.write(b);
            second.write(b);
        
    

y se usa como en:

    FileOutputStream file = new FileOutputStream("test.txt");
    TeePrintStream tee = new TeePrintStream(file, System.out);
    System.setOut(tee);

(solo una idea, no completa)

Reseñas y valoraciones del artículo

Si te gusta la informática, eres capaz de dejar una crónica acerca de qué te ha gustado de esta sección.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *