读取命令行输出

时间:2017-09-06 03:03:08

标签: java command-line inputstream

我正在尝试使用java和命令行自动提取WinRar .rar文件。我试图执行的一个这样的命令是

c:\Program Files\WinRAR\UnRAR.exe l E:\archives\test2.rar

此命令应列出归档中包含的所有文件,对于某些归档,它可以正常工作并产生以下输出:

UNRAR 5.50 beta 5 x64 freeware      Copyright (c) 1993-2017 Alexander Roshal

Archive: test2.rar
Details: RAR 5

Attributes      Size     Date    Time   Name
----------- ---------  ---------- -----  ----
*   .......      3204  2017-07-20 19:36  a\file.java
*   .......       190  2017-07-20 19:36  a\test.java
*   .......       608  2017-07-20 19:36  a\Main.java
    ...D...         0  2017-07-20 19:40  a
----------- ---------  ---------- -----  ----
                 4002                    4

但是,其他时候,它会在执行命令后立即要求输入密码。每当发生这种情况时,我的java程序就会挂起,但进程的输入流或错误流都没有打印出来。

在命令提示符中,当输出密码时,输出将如下所示:

E:\archives>"c:\Program Files\WinRAR\UnRAR.exe" l test.rar

UNRAR 5.50 beta 5 x64 freeware      Copyright (c) 1993-2017 Alexander Roshal

Enter password (will not be echoed) for test.rar:
Checksum error in the encrypted file test.rar. Corrupt file or wrong 
password.
Archive: test.rar
Details: RAR 4, encrypted headers
  0 files

我正在读取输入流,如下所示:

BufferedReader stdReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
while ((line = stdReader.readLine()) != null) {
    System.out.println("Read: " + line);
    stdOutput.append(line + "\n");
}

然而,我得到的唯一输出是:

Read: 
Read: UNRAR 5.50 beta 5 x64 freeware      Copyright (c) 1993-2017 Alexander Roshal

它只是挂在这里。我必须强行关闭它才能退出。

为什么"输入密码(不会回显)test.rar:"没有打印到输入流?如何判断命令何时请求用户输入(例如密码)。当这种情况发生时,如何防止我的程序冻结?

注意:这两个档案都受密码保护。其中一个人甚至在显示文件之前立即询问,另一个会向您显示文件,但在尝试打开文件时会询问密码。

0 个答案:

没有答案