2013-08-24 81 views
0

使用此代码执行时产生一些输出被执行正常的所有命令,但一些命令不产生输出并不例如执行 :RM * .JPG没有工作,但MKDIR是,我无法看出区别没有输出的java内执行的命令行bash命令是不是像

我很是新手,一派相当长的一段时间,但这个特殊的问题从未被提及 请帮帮我out 谢谢

+0

通过运行'rm * .jpg'你期待什么样的输出?您是否检查过该命令是否正在运行? –

+0

rm * .jpg当从命令行使用时,不会向用户反馈,它只会删除当前目录中的所有jpg文件。将从java程序生成的命令复制粘贴到命令行时,它确实正常工作rm * .jpg的退出输出为1,并且mkdir somedir的退出代码为0 – allard

回答

0

。在Java中,同一个shell没有运行,所以*不被解释为通配符。

正如指出here,尝试提取目标/工作目录你的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); 
+0

executeCommand(“rm”+ FieldGraphicsDir.getText()+“/”+“* .jpg”);是输入executeCommand方法的命令 – allard

0

如果有错误,否则它将去ErrorStream,你需要附上一个也:当您运行rm *在Linux上,shell解释,并采取*照顾

BufferedReader bre = new BufferedReader 
     (new InputStreamReader(p.getErrorStream())); 
+0

并且没有错误? – allard

+0

@allard检查这个相关的帖子:http://stackoverflow.com/questions/3343066/reading-streams-from-java-runtime-exec?answertab=active#tab-top –

+0

正如我所说,我是一个新手,但我在隧道尽头看到了一些亮点,这是关于*的,对吗? – allard