System.setOut() 到首选项节点
System.setOut() to a Preferences node
如何实现以下目标,其中 prefsOutputStream
是我要创建的伪变量:
PrintStream oldOut = System.out;
System.setOut(prefsOutputStream);
System.out.println("Foo Bar");
String logString = Preferences.userRoot().node("app").get("stdout","");
oldOut.println(logString); // Outputs "Foo Bar" into the console
我想到的一种方法是:
System.setOut(new PrintStream(new ByteArrayOutputStream() {
@Override
public void flush() throws IOException {
super.flush();
String old = Preferences.userRoot().node("app").get("stdout", "");
Preferences.userRoot().node("app").put("stdout", old + toString(StandardCharsets.UTF_8));
count = 0;
}
}, true, StandardCharsets.UTF_8));
这将创建一个 PrintStream
输出到字节数组输出流。每当您打印换行符(例如使用 println
)时,PrintStream
将自动刷新。这将导致 ByteArrayOutputStream
刷新,这会将自上次刷新以来写入流的所有内容写入首选项。
如何实现以下目标,其中 prefsOutputStream
是我要创建的伪变量:
PrintStream oldOut = System.out;
System.setOut(prefsOutputStream);
System.out.println("Foo Bar");
String logString = Preferences.userRoot().node("app").get("stdout","");
oldOut.println(logString); // Outputs "Foo Bar" into the console
我想到的一种方法是:
System.setOut(new PrintStream(new ByteArrayOutputStream() {
@Override
public void flush() throws IOException {
super.flush();
String old = Preferences.userRoot().node("app").get("stdout", "");
Preferences.userRoot().node("app").put("stdout", old + toString(StandardCharsets.UTF_8));
count = 0;
}
}, true, StandardCharsets.UTF_8));
这将创建一个 PrintStream
输出到字节数组输出流。每当您打印换行符(例如使用 println
)时,PrintStream
将自动刷新。这将导致 ByteArrayOutputStream
刷新,这会将自上次刷新以来写入流的所有内容写入首选项。