Runtime.exec不运行“查找”命令

我的问题是,我正在使用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); } ... ... ... } 

我不知道它是什么关系,可能是有一个字符,执行function无法运行。 我需要你宝贵的帮助 谢谢。

Runtime.exec() String[]参数不正确。 它必须被拆分,以便它包含每个项目的一个元素(可执行文件必须是一个字符串,然后每个单独的参数必须在它自己的字符串中)。

尝试像这样:

 songProcess = Runtime.getRuntime().exec(new String[]{"find", "/home/gozenem/emiornek/", "-name", "*.xml"}); 

另外调用waitFor你在做什么是不合适的。 您需要在进程运行时读取输出,否则可能会冒充Java VM和进程之间使用的I / O缓冲区。 因此,在处理完输出之后, waitFor移至waitFor

从过程文档:

默认情况下,创建的子流程没有自己的终端或控制台。 其所有的标准I / O(即标准输入,标准输出,标准错误)操作将被重定向到父进程,[…]。 由于某些本地平台仅为标准输入和输出流提供有限的缓冲区大小,因此如果不及时写入输入流或读取子流程的输出流,可能会导致子流程阻塞甚至死锁