【发布时间】:2011-04-21 09:55:23
【问题描述】:
我有一个 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 应用程序时,每个循环的命令都是这样的
cp -f '/temp_storage/LoveSongs/28.I miss you.mp3' /music_storage/data/0/0/1/108.mp3
如果我复制该日志行并在命令行中运行它,它会完美运行。然而,java 应用程序的结果总是返回代码 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 位服务器虚拟机(内部版本 14.0-b16, 混合模式)
【问题讨论】:
-
P/S:它没有抛出任何异常。
-
你试过在任何其他操作系统或 Linux 上运行它吗?
-
@My Hed Hurts:我运行了类似的任务,在另一台服务器上调用 shell 脚本文件,它运行正常。只有这个有问题。
-
也许这只是您尝试完成的更复杂的事情的一个简单示例,但是您为什么要分叉一个进程来复制文件?直接用java做比较简单。 apache commons-io 项目甚至有utility methods 使它更容易。
标签: java linux runtime runtime.exec