wake-up-neo.com

So schreiben Sie die Konsolenausgabe in eine TXT-Datei

Ich habe versucht, die Konsolenausgabe mit diesem Codevorschlag ( http://www.daniweb.com/forums/thread23883.html# ) in eine TXT-Datei zu schreiben, jedoch war ich nicht erfolgreich. Was ist falsch?

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");
   }
58
Jessy

Sie müssen so etwas tun:

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

Die zweite Aussage ist der Schlüssel. Es ändert den Wert des angeblich "final" System.out-Attributs in den angegebenen PrintStream-Wert.

Es gibt analoge Methoden (setIn und setErr), um die Standardeingabe- und Fehlerströme zu ändern. Weitere Informationen finden Sie in den Java.lang.System-Javadocs.

Eine allgemeinere Version des obigen ist dies:

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

Wenn appendtrue ist, wird der Stream an eine vorhandene Datei angehängt, anstatt sie abzuschneiden. Wenn autoflushtrue ist, wird der Ausgabepuffer geleert, wenn ein Byte-Array geschrieben wird, eine der println-Methoden aufgerufen wird oder ein \n geschrieben wird.


Ich möchte nur hinzufügen, dass es in der Regel besser ist, ein Protokollierungssubsystem wie Log4j , Logback oder das standardmäßige Java Java.util.logging Subsystem zu verwenden. Diese bieten eine fein abgestimmte Protokollierungssteuerung über Laufzeitkonfigurationsdateien, Unterstützung für das Rollen von Protokolldateien, Feeds für die Systemprotokollierung usw.

Alternativ, wenn Sie nicht "loggen", dann überlegen Sie Folgendes:

  • umleiten der Standardausgabe in eine Datei in der Befehlszeile oder
  • Ändern Sie Ihre Anwendung, um einen out-Stream zu verwenden, der als Parameter übergeben wird, anstatt in System.out zu schreiben.

Das Ändern von System.out kann zu bösen Überraschungen für den anderen Code in Ihrer JVM führen, der dies nicht erwartet.

113
Stephen C

Sie müssen keinen Code schreiben, nur in cmd Auf der Konsole können Sie schreiben

javac myFile.Java
java ClassName > a.txt

Die Ausgabedaten werden in der a.txt-Datei gespeichert.

27
ali ahmad

um preserve die Konsolenausgabe zu schreiben, dh in eine Datei zu schreiben und diese auch auf der Konsole anzuzeigen, können Sie eine Klasse wie die folgende verwenden: 

    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);
        }
    }

und verwendet wie in: 

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

( nur eine Idee, nicht vollständig

21

Erstellen Sie die folgende Methode:

public class Logger {
    public static void log(String message) { 
      PrintWriter out = new PrintWriter(new FileWriter("output.txt", true), true);
      out.write(message);
      out.close();
    }
}

(Ich habe die richtige IO - Behandlung in der obigen Klasse nicht hinzugefügt, und es wird nicht kompiliert - tun Sie es selbst. Denken Sie auch daran, den Dateinamen zu konfigurieren. Beachten Sie das Argument "true".) bei jedem Aufruf der Methode neu erstellt werden)

Dann statt System.out.println(str) Aufruf Logger.log(str)

Dieser manuelle Ansatz ist nicht vorzuziehen. Verwenden Sie ein Protokollierungsframework - slf4j, log4j , commons-logging und viele mehr

10
Bozho

Zusätzlich zu den verschiedenen diskutierten programmatischen Ansätzen besteht die Option, die Standardausgabe von der Shell umzuleiten. Hier sind einige Beispiele von Unix und DOS .

7
trashgod

Sie können System.setOut () beim Start Ihres Programms verwenden, um alle Ausgaben über System.out auf Ihre eigene PrintStream umzuleiten.

4
ZoogieZork

Dies ist meine Vorstellung von dem, was Sie versuchen, und es funktioniert gut:

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();
    }
}
3
Abhiyank

Der einfachste Weg, die Konsolenausgabe in eine Textdatei zu schreiben, ist 

//create a file first    
    PrintWriter outputfile = new PrintWriter(filename);
//replace your System.out.print("your output");
    outputfile.print("your output");
    outputfile.close(); 
1
Prakash Kandel
PrintWriter out = null;
try {
    out = new PrintWriter(new FileWriter("C:\\testing.txt"));
    } catch (IOException e) {
            e.printStackTrace();
    }
out.println("output");
out.close();

Ich verwende absoluten Pfad für den FileWriter. Es funktioniert für mich wie ein Zauber. Stellen Sie außerdem sicher, dass sich die Datei am Speicherort befindet. Andernfalls wird eine FileNotFoundException ausgelöst. Diese Methode erstellt keine neue Datei am Zielspeicherort, wenn die Datei nicht gefunden wird.

0

Konsolenausgabe in eine TXT-Datei schreiben

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();
    }
}

Wenn Sie anstelle der Textdatei PDF generieren möchten, verwenden Sie die unten angegebene Abhängigkeit:

<dependency>
        <groupId>com.itextpdf</groupId>
        <artifactId>itextpdf</artifactId>
        <version>5.0.6</version>
</dependency>

Verwenden Sie diesen Code, um eine PDF zu generieren:

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();
    }
}
0
Ashish Vishnoi