2017-11-20 5 views
0

Ich habe bereits in mehrere SFO Links e.g. für eine Lösung untersucht. Was ich habe ist Code von meinem Kollegen geschrieben, der etwa 30 Methoden hat, und beteiligt Nested Loops. Das Problem damit ist, wenn ich versuche, den Code in Eclipse auszuführen, hat die Konsolenausgabe das Long-Tail-Problem.Drucken sowohl auf der Konsole und in einer Datei

Was ich suchte war, die Ergebnisse (Zwischenergebnisse) auf der Konsole sowie auf einer Datei (ohne Änderungen an allen Sysout-Befehlen in allen Methoden) zu drucken.

Was habe ich jetzt getan so etwas wie dieses

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

Aber dies nur schreiben in eine Datei und nicht auf dem Display.

+0

Nun, sollten Sie überprüfen, ob es einen Standard-'OutputStream' gibt, der die Ausgabe dupliziert (nie aktiviert) oder Sie schreiben können eigene Klasse, die in mehrere 'OutputSteam' schreibt (eine geerbt, der Rest in einer' Collection'), dann diese Instanz in 'System.out' setzen – AxelH

+2

Geht es hier speziell um Eclipse? Es gibt eine Einstellung in Eclipse, um die gesamte Ausgabe in eine Datei zu schreiben, sowie Konsole - Konfigurationen ausführen> Konfiguration für das, was Sie gerade ausführen> Allgemein> Ausgabedatei überprüfen und Speicherort auswählen. –

Antwort

1

Sie könnten Ihren Ausgangsstrom verzweigen TeeOutputStream mit sowohl Konsole und einer Textdatei drucken

1

Erweiterung PrintStream ist vergleichsweise einfach. Versuchen Sie so etwas wie:

class ForkOut extends PrintStream { 
    // The other stream to write to. 
    final PrintStream[] others; 

    public ForkOut(PrintStream o1, PrintStream... others) { 
     super(o1); 
     this.others = others; 
    } 

    @Override 
    public void write(int b) { 
     super.write(b); 
     // Echo every write to the other streams. 
     for (PrintStream o : others) { 
      o.write(b); 
     } 
    } 

    @Override 
    public void write(byte[] buf, int off, int len) { 
     super.write(buf, off, len); 
     // Echo every write to the other streams. 
     for (PrintStream o : others) { 
      o.write(buf, off, len); 
     } 
    } 
} 

public void test(String[] args) throws FileNotFoundException { 
    System.out.println("Hello"); 
    System.setOut(new ForkOut(System.out, new PrintStream(new FileOutputStream("output.txt")))); 
    System.out.println("Hello again!"); 
} 
0

Die System.setOut() Methode leitet alle Ausgänge auf den System.out-Stream auf den gewünschten Strom (die in Ihrem Fall ist die Print out). Sie könnten die Ergebnisse in die Datei mit der out.print(String) Methode und auf der Konsole mit der System.out.print(String) Methode schreiben

Verwandte Themen