Java/File Input Output/Redirect
Содержание
Redirecting Standard Output, and Error
<source lang="java">
import java.io.FileOutputStream; import java.io.PrintStream; public class Main {
public static void main(String[] argv) throws Exception { System.setOut(new LogStream(System.out, new PrintStream(new FileOutputStream("out.log")))); System.setErr(new LogStream(System.err, new PrintStream(new FileOutputStream("err.log")))); System.out.println("output"); System.err.println("error"); }
} class LogStream extends PrintStream {
PrintStream out; public LogStream(PrintStream out1, PrintStream out2) { super(out1); this.out = out2; } public void write(byte buf[], int off, int len) { try { super.write(buf, off, len); out.write(buf, off, len); } catch (Exception e) { } } public void flush() { super.flush(); out.flush(); }
}
</source>
Redirect standard error
<source lang="java">
import java.io.FileOutputStream; import java.io.PrintStream; public class Main {
public static void main(String[] args) throws Exception { System.setErr(new PrintStream(new FileOutputStream("system_err.txt"))); String nullString = null; nullString = nullString.toUpperCase(); }
}
</source>
Redirect standard output
<source lang="java">
import java.io.FileOutputStream; import java.io.PrintStream; public class Main {
public static void main(String[] args) throws Exception { System.setOut(new PrintStream(new FileOutputStream("system_out.txt"))); System.out.println("sent to the file system_out.txt"); }
}
</source>
Redirect standard output to a file
<source lang="java">
import java.io.BufferedOutputStream; import java.io.FileOutputStream; import java.io.PrintStream; public class Main {
public static void main(String[] argv) throws Exception { System.setOut(new PrintStream(new BufferedOutputStream(new FileOutputStream("output.dat")))); }
}
</source>
Replace standard output and error with a print stream, output to both the console and to a file.
<source lang="java">
import java.io.FileOutputStream; import java.io.PrintStream; public class Main {
public static void main(String[] argv) throws Exception { System.setOut(new LogStream(System.out, new PrintStream(new FileOutputStream("out.log")))); System.setErr(new LogStream(System.err, new PrintStream(new FileOutputStream("err.log")))); System.out.println("output"); System.err.println("error"); }
} class LogStream extends PrintStream {
PrintStream out; public LogStream(PrintStream out1, PrintStream out2) { super(out1); this.out = out2; } public void write(byte buf[], int off, int len) { try { super.write(buf, off, len); out.write(buf, off, len); } catch (Exception e) { } } public void flush() { super.flush(); out.flush(); }
}
</source>
Standard Err and Output Windows
<source lang="java">
import java.io.OutputStream; import java.io.PrintStream; import javax.swing.JFrame; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.ScrollPaneConstants; public class StdErrOutWindows {
JTextArea outArea = new JTextArea(20, 50), errArea = new JTextArea(20, 50);; public StdErrOutWindows() { JScrollPane pain = new JScrollPane(outArea); JFrame outFrame = new JFrame("out"); outFrame.getContentPane().add(pain); outFrame.setVisible(true); pain = new JScrollPane(errArea); JFrame errFrame = new JFrame("err"); errFrame.getContentPane().add(pain); errFrame.setLocation(errFrame.getLocation().x + 20, errFrame.getLocation().y + 20); errFrame.setVisible(true); System.setOut(new PrintStream(new JTextAreaOutputStream(outArea))); System.setErr(new PrintStream(new JTextAreaOutputStream(errArea))); } public static void main(String[] args) { new StdErrOutWindows(); System.out.println("test to out"); try { throw new Exception("Test exception"); } catch (Exception e) { e.printStackTrace(); } } public class JTextAreaOutputStream extends OutputStream { JTextArea ta; public JTextAreaOutputStream(JTextArea t) { super(); ta = t; } public void write(int i) { ta.append(Character.toString((char)i)); } public void write(char[] buf, int off, int len) { String s = new String(buf, off, len); ta.append(s); } }
}
</source>