Sir*_*lot 1 java printing console
有没有办法从控制台检索已输出的输出:
System.out.print("blabla");
Run Code Online (Sandbox Code Playgroud)
?
如果你想能够看到你已经写入控制台的内容,你需要编写自己的PrintStream实现,它只是包装一个现有的PrintStream,存储它应该写的任何东西,然后委托(所有方法)到包装(原始)PrintStream做实际的工作.如何存储消息完全取决于您的需求(仅存储最后写入的字符串,存储时间戳的映射 - >字符串或其他).一旦你有了这个,你可以System.out用你自己的实现替换(通过System.setOut()):
public class RememberAllWrittenTextPrintStream extends PrintStream {
private static final String newLine = System.getProperty("line.separator");
private final StringBuffer sb = new StringBuffer();
private final PrintStream original;
public RememberAllWrittenTextPrintStream(PrintStream original) {
this.original = original;
}
public void print(double d) {
sb.append(d);
original.print(d);
}
public void print(String s) {
sb.append(s);
original.print(s);
}
public void println(String s) {
sb.append(s).append(newLine);
original.println(s);
}
public void println() {
sb.append(newLine);
original.println();
}
public void printf(String s, Object... args) {
sb.append( String.format(s, args) );
original.printf(s, args);
}
// .....
// the same for ALL the public methods in PrintStream....
// (your IDE should help you easily create delegates for the `original` methods.)
public String getAllWrittenText() {
return sb.toString();
}
}
Run Code Online (Sandbox Code Playgroud)
您还可能需要处理线程安全(StringBuffer是线程安全的,但您可能需要更多).
完成上述操作后,您可以:
RememberAllWrittenTextPrintStream ps
= new RememberAllWrittenTextPrintStream(System.out);
System.setOut(ps);
System.out.print("bla");
System.out.print("bla");
ps.getAllWrittenText(); // should now return "blabla"
Run Code Online (Sandbox Code Playgroud)
编辑:println()使用独立于平台的添加实现newLine.
| 归档时间: |
|
| 查看次数: |
3763 次 |
| 最近记录: |