0

使用此代码:

   private String executeCommand(String cmd ) {

    Process p;
    try {
        p = Runtime.getRuntime().exec(cmd);
        BufferedReader br = new BufferedReader(
            new InputStreamReader(p.getInputStream()));

        while ((commandlineOutput = br.readLine()) != null){
                System.out.println("line:" + commandlineOutput);
             }
        p.waitFor();
                System.out.println (p.exitValue());

        p.destroy();
    } catch (Exception e) {}

  }
return commandlineOutput;
}

我遇到了以下问题:所有产生一些输出的命令都正常执行,但是一些不产生输出的命令没有执行,例如:rm *.jpg is not working but mkdir is,我看不出区别

我是个新手,用谷歌搜索了一段时间,但从未提到过这个特殊问题,请帮帮我谢谢

4

2 回答 2

0

如果出现错误,它将转到 ErrorStream ,您还需要附加该错误:

BufferedReader bre = new BufferedReader
        (new InputStreamReader(p.getErrorStream()));
于 2013-08-24T02:17:03.173 回答
0

当您rm *在 linux 上运行时,shell 会解释并处理*. 在 Java 中,相同的 shell 没有运行,因此*不会被解释为通配符。

正如这里所指出的,尝试从您的cmd输入中提取目标/工作目录并执行以下操作:

File[] files = new File(<directory>).listFiles();
for(File file : files){
  if(file.getAbsolutePath().endsWith(".jpg")){
      //perform delete
  }
}

或者,您可以尝试(未经测试,因为我现在没有 linux 机器):

String[] command = new String[] {"rm", "*.jpg"}
p = Runtime.getRuntime().exec(command);
于 2013-08-24T02:17:28.487 回答