我的问题是,我正在使用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函数无法运行的一个字符。我需要您的宝贵帮助。谢谢。
您输入的String[]参数Runtime.exec()不正确。必须对其进行拆分,以便每个项目包含一个元素(可执行文件必须是一个字符串,然后每个单独的参数都必须包含在其自己的字符串中)。
String[]
Runtime.exec()
尝试类似的方法:
songProcess = Runtime.getRuntime().exec(new String[]{"find", "/home/gozenem/emiornek/", "-name", "*.xml"});
也waitFor不要打电话给您在做什么。您需要在进程运行时读取输出,否则就有可能填满Java VM和您的进程之间使用的I / O缓冲区的风险。因此,waitFor在处理完输出后将其移动到。
waitFor
从流程文档中:
默认情况下,创建的子进程没有自己的终端或控制台。它的所有标准I / O(即stdin,stdout,stderr)操作都将重定向到父进程。由于某些本机平台仅为标准输入和输出流提供有限的缓冲区大小,因此 未能及时写入子流程的输入流或读取子流程的输出流可能导致子流程阻塞甚至死锁 。