java - texto - Cómo escribir la salida de la consola en un archivo txt
printwriter java ejemplo (11)
Además de los diversos enfoques programáticos discutidos, otra opción es redirigir la salida estándar desde el shell. Aquí hay varios ejemplos de Unix y DOS .
Intenté escribir la salida de la consola en un archivo txt usando esta sugerencia de código ( http://www.daniweb.com/forums/thread23883.html# ) sin embargo, no tuve éxito. ¿Qué pasa?
try {
//create a buffered reader that connects to the console, we use it so we can read lines
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
//read a line from the console
String lineFromInput = in.readLine();
//create an print writer for writing to a file
PrintWriter out = new PrintWriter(new FileWriter("output.txt"));
//output to the file a line
out.println(lineFromInput);
//close the file (VERY IMPORTANT!)
out.close();
}
catch(IOException e1) {
System.out.println("Error during reading/writing");
}
Crea el siguiente método:
public class Logger {
public static void log(String message) {
PrintWriter out = new PrintWriter(new FileWriter("output.txt", true), true);
out.write(message);
out.close();
}
}
(No he incluido el manejo correcto de IO en la clase anterior, y no se compilará, hágalo usted mismo. También considere configurar el nombre del archivo. Tenga en cuenta el argumento "verdadero". Esto significa que el archivo no se volverá a crear cada vez que llamas al método)
Luego, en lugar de System.out.println(str)
llama a Logger.log(str)
Este enfoque manual no es preferible. Utilice un marco de trabajo de registro: slf4j, log4j , commons-logging y muchos más
Debes hacer algo como esto:
PrintStream out = new PrintStream(new FileOutputStream("output.txt"));
System.setOut(out);
La segunda declaración es la clave. Cambia el valor del atributo System.out
supuestamente "final" para que sea el valor de PrintStream proporcionado.
Hay métodos análogos ( setIn
y setErr
) para cambiar la entrada estándar y las secuencias de error; consulte java.lang.System
javadocs para más detalles.
Me gustaría agregar que, en general, es una mejor idea utilizar un subsistema de registro como Log4j , Logback o el subsistema Java java.util.logging estándar. Estos ofrecen cosas como el control de registro detallado a través de archivos de configuración en tiempo de ejecución, soporte para archivos de registro continuos, avances en el registro del sistema.
O bien, si lo que estás haciendo no es "iniciar sesión", entonces considera:
- redirigir salida estándar a un archivo en la línea de comando, o
- cambiar su aplicación para usar una
out
pasada como parámetro en lugar de escribir enSystem.out
.
Maniobrar (por ejemplo, redirigir) System.out
puede ocasionar sorpresas desagradables para otros códigos en su JVM que no esperan que esto suceda.
En netbeans, puede hacer clic con el botón derecho del mouse y luego guardarlo como un archivo .txt. Luego, en función del archivo .txt creado, puede convertir al archivo en cualquier formato que desee obtener.
No es necesario escribir ningún código, solo en cmd en la consola puede escribir:
javac myFile.java
java ClassName > a.txt
Los datos de salida se almacenan en el archivo a.txt.
Puede usar System.setOut() al inicio de su programa para redireccionar todos los resultados a través de System.out
a su propio PrintStream
.
para conservar la salida de la consola, es decir, escribir en un archivo y también mostrarlo en la consola, puede 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 <b>not</b> 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 usado como en:
FileOutputStream file = new FileOutputStream("test.txt");
TeePrintStream tee = new TeePrintStream(file, System.out);
System.setOut(tee);
( solo una idea, no completa )
La forma más fácil de escribir la salida de la consola en el archivo de texto es
//create a file first
PrintWriter outputfile = new PrintWriter(filename);
//replace your System.out.print("your output");
outputfile.print("your output");
outputfile.close();
Esta es mi idea de lo que estás tratando de hacer y funciona bien:
public static void main(String[] args) throws IOException{
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter out = new BufferedWriter(new FileWriter("c://output.txt"));
try {
String inputLine = null;
do {
inputLine=in.readLine();
out.write(inputLine);
out.newLine();
} while (!inputLine.equalsIgnoreCase("eof"));
System.out.print("Write Successful");
} catch(IOException e1) {
System.out.println("Error during reading/writing");
} finally {
out.close();
in.close();
}
}
Para escribir la salida de la consola en un archivo txt
public static void main(String[] args) {
int i;
List<String> ls = new ArrayList<String>();
for (i = 1; i <= 100; i++) {
String str = null;
str = +i + ":- HOW TO WRITE A CONSOLE OUTPUT IN A TEXT FILE";
ls.add(str);
}
String listString = "";
for (String s : ls) {
listString += s + "/n";
}
FileWriter writer = null;
try {
writer = new FileWriter("final.txt");
writer.write(listString);
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
Si desea generar el PDF en lugar del archivo de texto, use la dependencia dada a continuación:
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.0.6</version>
</dependency>
Para generar un PDF, use este código:
public static void main(String[] args) {
int i;
List<String> ls = new ArrayList<String>();
for (i = 1; i <= 100; i++) {
String str = null;
str = +i + ":- HOW TO WRITE A CONSOLE OUTPUT IN A PDF";
ls.add(str);
}
String listString = "";
for (String s : ls) {
listString += s + "/n";
}
Document document = new Document();
try {
PdfWriter writer1 = PdfWriter
.getInstance(
document,
new FileOutputStream(
"final_pdf.pdf"));
document.open();
document.add(new Paragraph(listString));
document.close();
writer1.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}
}
PrintWriter out = null;
try {
out = new PrintWriter(new FileWriter("C://testing.txt"));
} catch (IOException e) {
e.printStackTrace();
}
out.println("output");
out.close();
Estoy usando la ruta absoluta para el FileWriter. Me está funcionando como un encanto. También asegúrese de que el archivo esté presente en la ubicación. De lo contrario, lanzará una excepción FileNotFoundException. Este método no crea un nuevo archivo en la ubicación de destino si el archivo no se encuentra.