Java Runtime.exec未运行;查找“;命令
我的问题是,我使用Runtime.getruntime.exec()函数在Java上运行unix命令。但是,在运行exec()命令时,它会跳到代码的末尾。代码如下Java Runtime.exec未运行;查找“;命令,java,unix,Java,Unix,我的问题是,我使用Runtime.getruntime.exec()函数在Java上运行unix命令。但是,在运行exec()命令时,它会跳到代码的末尾。代码如下 Process songProcess; ArrayList<String> xmlFilePathsForEmi = new ArrayList<String>(); int countForEmiSongUpdates = 0; String line; try {
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);
}
...
...
...
}
处理过程;
ArrayList XmlFilePathSfremi=新的ArrayList();
int countforeisonguapdates=0;
弦线;
试一试{
songProcess=Runtime.getRuntime().exec(新字符串[]{“find/home/gozenem/emiornek/-name'*.xml'});//它跳到这里!
songProcess.waitFor();
bufferedReaderSong=新的BufferedReader(新的InputStreamReader(songProcess.getInputStream());
而((line=bufferedReaderSong.readLine())!=null){
xmlfilepathsfremi.add(行);
}
...
...
...
}
我不知道它与什么有关,可能有一个字符,exec函数无法运行。我需要你宝贵的帮助。谢谢。您的
运行时.exec()
的字符串[]
参数不正确。必须将其拆分,以便每个项包含一个元素(可执行文件必须是一个字符串,然后每个单独的参数必须以其自己的字符串形式出现)
尝试以下方法:
songProcess = Runtime.getRuntime().exec(new String[]{"find", "/home/gozenem/emiornek/", "-name", "*.xml"});
在您正在执行的位置调用waitFor
也不合适。您需要在进程运行时读取输出,否则可能会填充Java VM和进程之间使用的I/O缓冲区。因此,在处理完输出后,将waitFor
移动到
从文档中:
默认情况下,创建的子流程没有自己的终端或控制台。其所有标准I/O(即stdin、stdout、stderr)操作都将重定向到父进程[…]。由于某些本机平台仅为标准输入和输出流提供有限的缓冲区大小,因此未能及时写入子流程的输入流或读取子流程的输出流可能会导致子流程阻塞,甚至死锁
Runtime.exec()
的String[]
参数不正确。必须将其拆分,以便每个项包含一个元素(可执行文件必须是一个字符串,然后每个单独的参数必须以其自己的字符串形式出现)
尝试以下方法:
songProcess = Runtime.getRuntime().exec(new String[]{"find", "/home/gozenem/emiornek/", "-name", "*.xml"});
在您正在执行的位置调用waitFor
也不合适。您需要在进程运行时读取输出,否则可能会填充Java VM和进程之间使用的I/O缓冲区。因此,在处理完输出后,将waitFor
移动到
从文档中:
默认情况下,创建的子流程没有自己的终端或控制台。其所有标准I/O(即stdin、stdout、stderr)操作都将重定向到父进程[…]。由于某些本机平台仅为标准输入和输出流提供有限的缓冲区大小,因此未能及时写入子流程的输入流或读取子流程的输出流可能会导致子流程阻塞,甚至死锁
我试过你写的东西,这次在运行songProces.waitFor()行时它停止了。它退出调试过程。什么原因会导致这种情况?请完全删除waitFor()。运行console实用程序时不需要此选项。读它的标准直到它结束。@AlexR:我有点同意,但“最佳实践”是调用
waitFor
,然后调用exitValue
,以确保这些东西工作正常find
可以返回非零,表示(未指定)问题。我正在尝试此操作,但它不起作用。songProcess=Runtime.getRuntime().exec(新字符串[]{“find”、“/home/gozenem/emiornek/”、“-name”、“*.xml”、“|”、“wc”、“-l”});我如何运行这个?谢谢。如果接受标志不起作用,请将其删除。刚开始的时候不要使用waitFor
。我试过你写的东西,这次它在运行songProces.waitFor()行时停止。它退出调试过程。什么原因会导致这种情况?请完全删除waitFor()。运行console实用程序时不需要此选项。读它的标准直到它结束。@AlexR:我有点同意,但“最佳实践”是调用waitFor
,然后调用exitValue
,以确保这些东西工作正常find
可以返回非零,表示(未指定)问题。我正在尝试此操作,但它不起作用。songProcess=Runtime.getRuntime().exec(新字符串[]{“find”、“/home/gozenem/emiornek/”、“-name”、“*.xml”、“|”、“wc”、“-l”});我如何运行这个?谢谢。如果接受标志不起作用,请将其删除。对于初学者,根本不要使用waitFor
。