gpt4 book ai didi

java - 在java中获取控制台文本

转载 作者:行者123 更新时间:2023-11-29 08:15:54 24 4
gpt4 key购买 nike

有没有办法从控制台检索输出的输出:

System.out.print("blabla");

?

最佳答案

如果您希望能够看到您已经写入控制台的内容,您需要编写自己的 PrintStream 实现,它简单地包装现有的 PrintStream,存储任何内容它应该编写然后将(所有 方法)委托(delegate)给包装的(原始)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();
}

}

您可能还需要注意线程安全(StringBuffer 是线程安全的,但您可能需要的不止于此)。

完成上述操作后,您可以:

RememberAllWrittenTextPrintStream ps
= new RememberAllWrittenTextPrintStream(System.out);
System.setOut(ps);
System.out.print("bla");
System.out.print("bla");
ps.getAllWrittenText(); // should now return "blabla"

编辑:使用独立于平台的 newLine 添加了 println() 实现。

关于java - 在java中获取控制台文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4906248/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com