使用System.out
(和相關)總是顯得很笨拙,因爲公共領域,現在與最新的Netbeans給出了一個公然的「聲明應該被刪除」的提示。Java控制檯應用程序:System.out仍然是一種可行的方式嗎?
因此我的問題:System.out
仍然是寫入控制檯的首選方式,或者是否有任何其他API應該是首選?
編輯:我不希望這記錄,但一個簡單的控制檯應用程序。類似於ps
,它將正在運行的進程打印到控制檯。
使用System.out
(和相關)總是顯得很笨拙,因爲公共領域,現在與最新的Netbeans給出了一個公然的「聲明應該被刪除」的提示。Java控制檯應用程序:System.out仍然是一種可行的方式嗎?
因此我的問題:System.out
仍然是寫入控制檯的首選方式,或者是否有任何其他API應該是首選?
編輯:我不希望這記錄,但一個簡單的控制檯應用程序。類似於ps
,它將正在運行的進程打印到控制檯。
在被設計成運行的命令從命令行(IMO)合理地使用System.out
和System.err
來輸出以及運行該命令的人可以合理期望理解的錯誤消息。如果您使用合適的外殼或腳本運行應用程序,則可能會將System.out
和/或System.err
流重定向到流水線中的文件或其他進程。 AFAIK使用System.out
和System.err
是就重定向而言「尊重」用戶意願的唯一方式。因此,對於大多數使用情況,這是仍然是命令行應用程序寫入輸出以供用戶查看的最佳方式。
在JDK 1.6及更高版本中,還有一個名爲java.io.Console
的類,它可讓您訪問控制檯。它沒有在Javadoc中詳細說明,但我懷疑java.io.Console
會向控制檯打開新流,因此無法重定向。 (在老式的UNIX盒子上打開「/ dev/tty」的道德等價物)。IMO,如果你的應用程序想要真正與用戶交談,而沒有重定向的可能性,你應該使用它;例如要求並且然後讀取密碼。
但是,如果你的應用是GUI命令,尤其是如果它的目的是爲無人值守服務運行,你應該避免「寫到控制檯」,因爲:
System.{out,err}
或java.io.Console
)可以連接到什麼,或1 - 根據控制檯輸出的性質,這實際上可能正是用戶想要什麼。但應用程序員需要考慮到這一點。
是的,主要是因爲一個原因:沒有其他方式寫入控制檯。即使你使用日誌框架,它最終也會使用System.out
。
我不會建議直接寫入控制檯。通過使用log4j(或類似)框架,您可以配置您希望輸出的位置,而無需更改代碼。
他想寫入控制檯。沒有人提到日誌記錄。 – whiskeysierra 2010-03-03 09:07:15
我沒有提到日誌記錄:)通過使用日誌框架寫入控制檯,您給自己增加了靈活性。即使對於簡單的控制檯應用程序,直接寫入System.out也是不靈活的。例如,您可能有一個命令開關來更改輸出的位置,或者更改輸出級別的選項。 – objects 2010-03-03 09:18:08
好的,但爲此目的使用日誌框架(如log4j,你提到的)感覺就像黑客 – whiskeysierra 2010-03-03 17:18:41
只需使用一個日誌框架和而不是在調試級別和在開發環境中使用System.out
日誌(不生產)設定輸出到控制檯和日誌級別調試
question.contains(「log」)? +1:-1 – whiskeysierra 2010-03-03 09:06:07
我想你的評論是給你downvote周圍的其他方法:P – Lombo 2010-03-03 10:09:03
嘗試使用java.io.Console的一個問題是,如果你從Eclipse內部運行你的應用程序將無法工作(我懷疑它也在任何IDE內部失敗),因爲Console類中有一些條件檢查。 – SteveD 2010-03-03 10:33:03