txt texto sobreescribir por modificar manejo linea leer guardar ejemplos datos como archivos archivo java file-io console fileoutputstream printstream

texto - modificar archivos txt en java



Escritura en consola y archivo de texto (3)

En System.java , esta es la declaración de la propiedad de out :

public final static PrintStream out

Verá que solo puede ser un objeto PrintSteam a la vez. Entonces, es la consola o el archivo, pero no ambos.

En esta línea, ha redireccionado efectivamente el destino:

System.setOut(ps);

Por lo tanto, su salida deja de mostrarse en la consola.

Encontré el siguiente código de Internet, funciona pero no escribe la consola impresa en omt.txt, solo escribe las sentencias System.out.println después del segundo bloque catch. Si ejecuta el código una vez, comprenderá qué Quiero decir. Todo lo que quiero es escribir lo que está en la consola del archivo "omt.txt" que es todo ...

Después de algunas respuestas, veo que mi pregunta no era clara, lo siento por eso. Quiero guardar el resultado de la consola en el archivo de texto omt.txt. Si en la consola se imprime "Hello 123", también debe estar en el archivo omt.txt. En otras palabras, lo que se imprime en la consola debe escribirse simultáneamente en el archivo om.txt o puede ser posterior a la ejecución de la consola, pero debe ser 1-a1 lo mismo!

import java.io.File; import java.io.FileOutputStream; import java.io.PrintStream; public class Wrt_file { public static void main(String[] args) { System.out.println("THIS is what I see on the console. but not on TEXT file"); File f = new File("omt.txt"); if(!f.exists()) { try { f.createNewFile(); } catch (Exception e) { e.printStackTrace(); } } try { FileOutputStream fos = new FileOutputStream(f); PrintStream ps = new PrintStream(fos); System.setOut(ps); } catch (Exception e) { e.printStackTrace(); } System.out.println("THIS is what I see on the text file, but not on CONSOLE"); for (int i=0; i<10; i++){ System.out.println("Testing"); } } }


La razón es :

The java.lang.System.setOut() método The java.lang.System.setOut() reasigna la secuencia de salida "estándar".

entonces, cuando use System.out.println solo se imprimirá en el archivo de texto

Por lo tanto, si desea imprimir en el archivo de texto y en la consola, intente esto:

FileOutputStream fos = new FileOutputStream(f);     PrintStream ps = new PrintStream(fos); ps.println("THIS is what I see on the text file, but not on CONSOLE"); System.out.println("THIS is what I see on the text file, but not on CONSOLE"); for (int i = 0; i < 4; i++) { ps.println("Testing"); System.out.println("Testing"); }


Respuesta actualizada después de enterarse de que OP quiere duplicar las transmisiones

Como desea escribir datos en ambas transmisiones, intente utilizar TeeOutputStream de Apache Commons . Cambia tu código en el segundo intento de

try { FileOutputStream fos = new FileOutputStream(f); //we will want to print in standard "System.out" and in "file" TeeOutputStream myOut=new TeeOutputStream(System.out, fos); PrintStream ps = new PrintStream(myOut, true); //true - auto-flush after println System.setOut(ps); } catch (Exception e) { e.printStackTrace(); }

Ahora los resultados de System.out también se colocarán en su archivo.

Solo asegúrese de cerrar la escritura del flujo en el archivo antes de que la aplicación termine.