当我尝试从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 -x
或htop
时,我发现解压过程仍在此处。
请帮助。
答案 0 :(得分:1)
您可能需要从进程中读取InputStream。请参阅Process
的javadoc哪个州:
因为某些本机平台仅提供有限的缓冲区大小 标准输入和输出流,无法及时写入输入 流或读取子进程的输出流可能会导致 要阻止的子进程,甚至是死锁。
答案 1 :(得分:1)
检查解压缩命令是否提示输入某些内容,如果文件已经存在并且您要覆盖它,可能会发出警告。
另外,这是我在java程序中看到的反引号吗?
答案 2 :(得分:1)
PS。
我使用的是java.lang.Runtime
类,但发现java.lang.ProcessBuilder
类更优越。您可以指定当前工作目录,最重要的是指定系统环境。
答案 3 :(得分:0)
请尝试以下方法:
p = rn.exec(unzip);
p.waitFor()
我希望它能改变一些东西。