Runtime.getruntime (). Exec () не работает в Linux - PullRequest
0 голосов
/ 21 апреля 2011

У меня проблема с 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, смешанный режим)

Ответы [ 2 ]

4 голосов
/ 21 апреля 2011

AFAIK, если у вашей команды есть несколько параметров командной строки, вам нужно указать их в строке [], вы пробовали это?Кроме того, если вам нужно копировать файлы вокруг, вы можете использовать FileUtils или библиотеки Guava (не помню, как это там называется)

см. соответствующую тему о копировании файлов

1 голос
/ 21 апреля 2011

Имеет ли пользователь, под которым запущено приложение, необходимые разрешения? И в процессе вы пытались заполучить stderr, чтобы увидеть, есть ли там что-нибудь полезное?

...