将java输入传递到外部应用程序

时间:2016-09-12 11:56:19

标签: java stream processbuilder

我正在尝试从java文件中执行外部程序(.exe)。 到目前为止,这是我的代码:

try{
                Process process = new ProcessBuilder(path).start();
                InputStream is = process.getInputStream();
                InputStreamReader isr = new InputStreamReader(is);
                BufferedReader br = new BufferedReader(isr);
                String line;




                while ((line = br.readLine()) != null) {
                  System.out.println(line);
                }

                }
                catch(Exception e){e.printStackTrace();}

程序的初始输出显示在我的java程序的控制台窗口中,但遗憾的是它需要用户密码并输入。我已经尝试在互联网上实现了很多可能的解决方案,例如.inheritIO()或转发process-arguments中的命令,即Process process = new ProcessBuilder(path,“pw”,“/ c”)。start() ;但这不起作用。我不明白为什么输入流工作得很好,但任何类型的输出流似乎都不起作用。

1 个答案:

答案 0 :(得分:0)

您可以按照以下方式:

  1. 忽略Java一段时间:看看你是否能找到一种方法来使用cmd / shell调用该工具,并将其作为命令行参数给出密码(意思是:在不增加另一层复杂性的情况下进行此类实验)。如果可行,只需将这些参数带入Java程序即可在那里使用它们。
  2. 如果这不起作用,您必须确定是否可以将密码“写”到流程中; there如何做到这一点有很多例子。
  3. 如果这也不起作用,那么你的.exe没有机会使用stdin读取密码。在这种情况下,您唯一能做的就是:改变.exe的工作方式。示例:如果您的.exe实际上在另一个系统上执行某些“远程操作”(您需要密码);然后你可以尝试建立一个无密码的通信;基于私钥/公钥对。