Q
獲取Java中
1
A
回答
5
如果你希望能夠看到你已經寫到控制檯,你需要編寫自己的PrintStream
實現,只是封裝現有PrintStream
,不管它是應該寫,然後商店代表(種所有的方法)來包裹(原件)PrintStream
做實際工作。你如何存儲消息完全取決於你的需要(只存儲最後寫入字符串,存儲地圖時間戳 - >字符串或其他)。一旦你有了這個,你可以用你自己的實現(通過System.setOut()
)取代System.out
:
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"
編輯:使用添加println()
實現平臺無關newLine
。
0
如果我理解你,你可以從Java啓動過程和讀是這樣的輸出:
ProcessBuilder builder = new ProcessBuilder("/bin/bash");
builder.redirectErrorStream(true);
Process process = builder.start();
OutputStream stdin = process.getOutputStream();
InputStream stderr = process.getErrorStream();
InputStream stdout = process.getInputStream();
BufferedReader reader = new BufferedReader (new InputStreamReader(stdout));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(stdin));
String input = scan.nextLine();
...
如果您需要任何處理更復雜的控制(通過PID訪問,名稱等),這是真正好的庫: Java Service Wrapper
0
,我不知道您的具體要求,但,如果你想將輸出寫入到多個目的地,使用任何日誌框架。記錄器在寫入輸出時允許更多的控制。請參閱下面的鏈接瞭解更多信息,這也是最佳做法。
http://logging.apache.org/index.html和http://www.javaworld.com/javaworld/jw-12-2004/jw-1220-toolbox.html
相關問題
- 1. 獲取Java中
- 2. 獲取Java中
- 3. 獲取Java中
- 4. 獲取Java中
- 5. 獲取Java中
- 6. 獲取Java中
- 7. 獲取密鑰在Java中
- 8. Java:從InputStreamReader中獲取InputStream
- 9. 從ArrayList中獲取值java
- 10. 至獲取Java中的JTextArea
- 11. JAVA獲取的ArrayList中
- 12. 在Java中獲取Cookie
- 13. 從包名中獲取.java
- 14. 在java中獲取IllegalAnnotationsException
- 15. 從arraylist java中獲取值?
- 16. 在java中獲取char值
- 17. 在Java中獲取NoSuchElementsException?
- 18. 在Java中獲取FQDN
- 19. 從ResultSet Java中獲取值
- 20. 獲取用java
- 21. 的Java:獲取
- 22. Java - 獲取NullPointerException
- 23. Java datePicker獲取值
- 24. Java SQL獲取列
- 25. JAVA獲取URL API
- 26. 獲取輸入java
- 27. Java PhantomReference未獲取
- 28. 獲取使用Java
- 29. Java獲取textField.getText()onclick
- 30. 用java獲取access_token
你想去哪裏找回呢?你想在你打印的程序中檢索它嗎?或者你想在另一個程序中閱讀它? – yankee 2011-02-05 10:13:19
我希望通過該計劃的另一部分進行檢索,使某種通用的測試儀。通過查看答案,我發現這個問題的更好的解決方案通過使環境測試儀 – SirLenz0rlot 2011-02-07 13:30:44