我的问题是,我使用Runtime.getruntime.exec()函数在Java上运行我的unix命令。但是,当正在运行exec()命令时,它会跳转到代码的末尾。代码如下。
Process songProcess;
ArrayList<String> xmlFilePathsForEmi = new ArrayList<String>();
int countForEmiSongUpdates = 0;
String line;
try {
songProcess = Runtime.getRuntime().exec(new String[]{"find /home/gozenem/emiornek/ -name '*.xml'"}); // It jumps here !
songProcess.waitFor();
bufferedReaderSong = new BufferedReader(new InputStreamReader(songProcess.getInputStream()));
while((line = bufferedReaderSong.readLine()) != null){
xmlFilePathsForEmi.add(line);
}
...
...
...
}
我不知道它与什么有关,可能是有一个exec函数无法运行的字符。我需要你宝贵的帮助。谢谢。
答案 0 :(得分:3)
String[]
Runtime.exec()
参数不正确。它必须被拆分,以便每个项目包含一个元素(可执行文件必须是一个字符串,然后每个单独的参数必须有自己的字符串)。
尝试类似:
songProcess = Runtime.getRuntime().exec(new String[]{"find", "/home/gozenem/emiornek/", "-name", "*.xml"});
同样调用waitFor
你正在做的事情是不合适的。您需要在进程运行时读取输出,否则可能会填满Java VM和进程之间使用的I / O缓冲区。因此,在处理完输出后,请将waitFor
移到。
来自Process文档:
默认情况下,创建的子进程没有自己的终端或控制台。其所有标准I / O(即stdin,stdout,stderr)操作将被重定向到父进程,[...]。由于某些本机平台仅为标准输入和输出流提供有限的缓冲区大小,无法及时写入输入流或读取子进程的输出流可能导致子进程阻塞,甚至死锁。 / p>