在java中执行没有输出的命令行bash命令不像
使用此代码:在java中执行没有输出的命令行bash命令不像,java,command-line,execution,Java,Command Line,Execution,使用此代码: private String executeCommand(String cmd ) { Process p; try { p = Runtime.getRuntime().exec(cmd); BufferedReader br = new BufferedReader( new InputStreamReader(p.getInputStream())); while ((comm
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不工作,但mkdir工作,我看不出有什么区别
我是一个新手,谷歌搜索了很长一段时间,但这个问题从未被提及
请帮帮我
谢谢如果出现错误,它将转到ErrorStream,您还需要附加该错误:
BufferedReader bre = new BufferedReader
(new InputStreamReader(p.getErrorStream()));
在linux上运行
rm*
时,shell解释并处理*
。在Java中,同一个shell没有运行,因此*
不会被解释为通配符
如前所述,尝试从cmd
输入中提取目标/工作目录,并执行以下操作:
File[] files = new File(<directory>).listFiles();
for(File file : files){
if(file.getAbsolutePath().endsWith(".jpg")){
//perform delete
}
}
运行
rm*.jpg
,您希望得到什么样的输出?您是否检查了该命令是否正在运行?rm*.jpg从命令行使用时,不会向用户生成反馈,它只会删除当前目录中的所有jpg文件。当将java程序生成的命令复制粘贴到命令行时,该命令正常工作。rm*.jpg的出口输出为1,mkdir somedir的出口代码为0@allard查看这篇相关帖子:正如我所说,我是个新手,但我看到了一些曙光,这是关于*,我说的对吗?**好的,我解决了…**字符串[]cmds={“bash”,“-c”,cmd};ProcessBuilder probuilder=新的ProcessBuilder(cmds);executeCommand(“rm”+FieldGraphicsDir.getText()+“/”+“*.jpg”);是否将命令馈送到executeCommand方法中
String[] command = new String[] {"rm", "*.jpg"}
p = Runtime.getRuntime().exec(command);