У меня проблема с Java Runtime.getRuntime().exec()
. Я запускаю Java-приложение в Linux, и мне просто нужно выполнить простую задачу: скопировать и переименовать файл с помощью команды 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,
смешанный режим)