Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Runtime.exec未运行;查找“;命令_Java_Unix - Fatal编程技术网

Java Runtime.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 {

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

...
...
...
}
处理过程;
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