我正在尝试使用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:"没有打印到输入流?如何判断命令何时请求用户输入(例如密码)。当这种情况发生时,如何防止我的程序冻结?
注意:这两个档案都受密码保护。其中一个人甚至在显示文件之前立即询问,另一个会向您显示文件,但在尝试打开文件时会询问密码。