2016-09-06 108 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,因为那样我就冒着用户设置密码而不模糊的风险。无论如何,你可能是对的,没有解决方案。我将添加一个选项将密码发送到文本文件中。 –