我遇到了Java Runtime.getRuntime().exec()
问题。我在Linux上运行我的Java应用程序,只需执行一项基本任务:使用cp
命令复制和重命名文件。但是,它似乎不起作用。
这是我调用Runtime.getRuntime().exec()
:
String command = "cp -f '" + old_path + "' " + song_info[6] + ".mp3";
System.out.println(command);
log.info(command);
try{
p = Runtime.getRuntime().exec(command);
int returnCode;
try {
returnCode = p.waitFor();
System.out.println("Return code = " + returnCode);
} catch (InterruptedException ex) {
java.util.logging.Logger.getLogger(Import.class.getName()).log(Level.SEVERE, null, ex);
}
} catch(IOException e){log.error(e);}
当我运行java app时,每个循环的命令都是这样的
cp -f '/temp_storage/LoveSongs/28.I miss you.mp3' /music_storage/data/0/0/1/108.mp3
如果我复制该日志行并在命令行中运行它,它就能完美运行。但是,java app的结果总是返回代码1(表示失败)。即使在命令字符串之前包含/bin/bash -c
,它仍然无效。
有什么建议吗?我刚刚在该服务器上安装了JRE和JDK。当我输入
java -version
我得到了:
java版“1.6.0_17”OpenJDK 运行时环境(IcedTea6 1.7.10) (rhel-1.20.b17.el5-x86_64)OpenJDK 64位服务器VM(版本14.0-b16, 混合模式)
答案 0 :(得分:4)
AFAIK,如果你的命令有多个命令行参数你需要在String []中提供它们,你试过吗?此外,如果您需要复制文件,可以使用FileUtils或Guava库(不记得它在那里被称为)
答案 1 :(得分:1)
运行应用程序的用户是否具有必要的权限?从这个过程来看,你是否试过抓住stderr看看那里有什么有用的东西?