2016-09-06 116 views
3

我正在使用System.console()以讀取用戶密碼。Java:如何從文件讀取密碼?

我的代碼:

Console console = System.console(); 
    if (console == null) { 
     throw new RuntimeException("No console is available for input"); 
    } 

    System.out.print("Enter the password: "); 
    String password = new String(console.readPassword()); 

它的工作很好,當我運行它簡單(從Redhat)。

問題是,當我嘗試從文本文件中讀取密碼:

java -jar my_jar.jar < password.txt

我得到:

沒有控制檯可用於輸入。

我該如何解決?

+0

這聽起來像一個已知的bug /問題:System.console返回null。有關信息和可能的解決方法,請參閱此問題的答案:http://stackoverflow.com/questions/4203646/system-console-returns-null – Akunosh

回答

0

此行爲是預期的。從java.io.Console引用:

無論是虛擬機具有控制檯取決於 底層平臺,也取決於在其中虛擬機 被調用的方式。如果虛擬機從一個 交互式命令行開始,而不需要重新定向標準輸入和輸出 流然後其控制檯將存在並且通常將 連接以從其中虛擬機 推出鍵盤和顯示器。

對於可能的解決方案,而不使用Cosole您可以閱讀本答案Trying to read from the console in Java

如果存在,則可以繼續使用控制檯,如果不存在,則可以回到BufferedReader/Scaner

+0

謝謝,但我想使用java控制檯提供的密碼混淆選項。 –

+0

如果存在,則可以繼續使用控制檯,如果不存在則返回到BufferedReader/Scaner。如果你沒有控制檯,我不明白你如何使用'密碼混淆選項Java控制檯提供'。 – chimmi

+0

我不想使用BufferedReader/Scaner,因爲那樣我就冒着用戶設置密碼而不模糊的風險。無論如何,你可能是對的,沒有解決方案。我將添加一個選項將密碼發送到文本文件中。 –