0

当我尝试从 java 执行外部程序时,我使用下面的代码:

Process p;
rn = Runtime.getRuntime();

String[] unzip = new String[2];

unzip[0]="unzip";

unzip[1]=archive ;

public void dezip() throws IOException{

    p = rn.exec(unzip);
    int ret = p.exitValue();

System.out.println("End of unzip method");

但是我的最后一个System.out从未执行,就好像我们从unzip方法中退出一样。该unzip()调用只完成了一半的工作,我的存档只有一部分被解压缩。当我使用ps -xhtop从命令行时,我看到解压缩过程仍然存在。

请帮忙。

4

4 回答 4

2

您可能需要从进程中读取 InputStream。查看Process的 javadoc

其中指出:

由于一些原生平台只为标准输入输出流提供有限的缓冲区大小,未能及时写入子进程的输入流或读取输出流可能会导致子进程阻塞,甚至死锁。

于 2011-09-15T12:56:28.437 回答
1

检查 unzip 命令是否提示输入某些内容,如果文件已存在并且您想覆盖它,则可能会发出警告。

另外,这是我在 Java 程序中间看到的反引号吗?

于 2011-09-15T12:57:11.883 回答
1
  1. 确保外部程序不等待用户输入
  2. 在 Windows 系统上启动以处理带有空格或特殊字符的目录时,检查是否引用了可执行路径。

PS。我正在使用该java.lang.Runtime课程,但发现该java.lang.ProcessBuilder课程要好得多。您可以指定当前工作目录,最重要的是系统环境。

于 2011-09-15T13:21:20.853 回答
0

请尝试以下方法:

p = rn.exec(unzip);
p.waitFor()

我希望它会改变一些东西。

于 2011-09-15T12:54:33.813 回答