Runtime.getruntime()。exec()在Linux上不起作用

时间:2011-04-21 09:55:23

标签: java linux runtime runtime.exec

我遇到了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,   混合模式)

2 个答案:

答案 0 :(得分:4)

AFAIK,如果你的命令有多个命令行参数你需要在String []中提供它们,你试过吗?此外,如果您需要复制文件,可以使用FileUtils或Guava库(不记得它在那里被称为)

请参阅此relevant thread about copying files

答案 1 :(得分:1)

运行应用程序的用户是否具有必要的权限?从这个过程来看,你是否试过抓住stderr看看那里有什么有用的东西?