2010-03-03 24 views
2

使用System.out(和相關)總是顯得很笨拙,因爲公共領域,現在與最新的Netbeans給出了一個公然的「聲明應該被刪除」的提示。Java控制檯應用程序:System.out仍然是一種可行的方式嗎?

因此我的問題:System.out仍然是寫入控制檯的首選方式,或者是否有任何其他API應該是首選?

編輯:我不希望這記錄,但一個簡單的控制檯應用程序。類似於ps,它將正在運行的進程打印到控制檯。

回答

8

在被設計成運行的命令從命令行(IMO)合理地使用System.outSystem.err來輸出以及運行該命令的人可以合理期望理解的錯誤消息。如果您使用合適的外殼或腳本運行應用程序,則可能會將System.out和/或System.err流重定向到流水線中的文件或其他進程。 AFAIK使用System.outSystem.err是就重定向而言「尊重」用戶意願的唯一方式。因此,對於大多數使用情況,這是仍然是命令行應用程序寫入輸出以供用戶查看的最佳方式。

在JDK 1.6及更高版本中,還有一個名爲java.io.Console的類,它可讓您訪問控制檯。它沒有在Javadoc中詳細說明,但我懷疑java.io.Console會向控制檯打開新流,因此無法重定向。 (在老式的UNIX盒子上打開「/ dev/tty」的道德等價物)。IMO,如果你的應用程序想要真正與用戶交談,而沒有重定向的可能性,你應該使用它;例如要求並且然後讀取密碼。

但是,如果你的應用是GUI命令,尤其是如果它的目的是爲無人值守服務運行,你應該避免「寫到控制檯」,因爲:

  • 控制檯流(System.{out,err}java.io.Console )可以連接到什麼,或
  • 因爲控制檯窗口埋,或
  • 5月用戶不會注意到控制檯輸出控制檯輸出最終可能會惹惱用戶,特別是如果你的應用程序提供了沒辦法至壓制它。

1 - 根據控制檯輸出的性質,這實際上可能正是用戶想要什麼。但應用程序員需要考慮到這一點。

+1

嘗試使用java.io.Console的一個問題是,如果你從Eclipse內部運行你的應用程序將無法工作(我懷疑它也在任何IDE內部失敗),因爲Console類中有一些條件檢查。 – SteveD 2010-03-03 10:33:03

5

是的,主要是因爲一個原因:沒有其他方式寫入控制檯。即使你使用日誌框架,它最終也會使用System.out

0

我不會建議直接寫入控制檯。通過使用log4j(或類似)框架,您可以配置您希望輸出的位置,而無需更改代碼。

+0

他想寫入控制檯。沒有人提到日誌記錄。 – whiskeysierra 2010-03-03 09:07:15

+0

我沒有提到日誌記錄:)通過使用日誌框架寫入控制檯,您給自己增加了靈活性。即使對於簡單的控制檯應用程序,直接寫入System.out也是不靈活的。例如,您可能有一個命令開關來更改輸出的位置,或者更改輸出級別的選項。 – objects 2010-03-03 09:18:08

+2

好的,但爲此目的使用日誌框架(如log4j,你提到的)感覺就像黑客 – whiskeysierra 2010-03-03 17:18:41

0

只需使用一個日誌框架和而不是在調試級別和在開發環境中使用System.out日誌(不生產)設定輸出到控制檯和日誌級別調試

+6

question.contains(「log」)? +1:-1 – whiskeysierra 2010-03-03 09:06:07

+1

我想你的評論是給你downvote周圍的其他方法:P – Lombo 2010-03-03 10:09:03

相關問題