Подтвердить что ты не робот

Как использовать команду "cd" с использованием времени выполнения Java?

Я создал автономное приложение Java, в котором я пытаюсь изменить каталог, используя команду "cd" в терминале Ubuntu 10.04. Я использовал следующий код.

String[] command = new String[]{"cd",path};
Process child = Runtime.getRuntime().exec(command, null);

Но приведенный выше код дает следующую ошибку:

Exception in thread "main" java.io.IOException: Cannot run program "cd": java.io.IOException: error=2, No such file or directory

Кто-нибудь может рассказать мне, как его реализовать?

4b9b3361

Ответ 1

Нет исполняемого файла с именем cd, потому что он не может быть реализован в отдельном процессе.

Проблема состоит в том, что каждый процесс имеет свой текущий рабочий каталог и реализует cd, поскольку отдельный процесс будет только изменять , который обрабатывает текущий рабочий каталог.

В программе Java вы не можете изменить текущий рабочий каталог, и вам не нужно. Просто используйте абсолютные пути к файлам.

В одном случае, когда текущая рабочая директория имеет значение, выполняется внешний процесс (используя ProcessBuilder или Runtime.exec()). В этих случаях вы можете явно указать рабочий каталог для нового процесса (ProcessBuilder.directory() и три аргумента Runtime.exec() соответственно.)

Примечание: текущий рабочий каталог можно прочитать из системного свойства user.dir. Возможно, вы захотите установить это системное свойство. Обратите внимание, что это приведет к очень плохим несоответствиям, потому что он не должен быть доступен для записи.

Ответ 2

Вы изучили эту команду exec для java Runtime, создайте объект файла с контуром "cd" и затем введите его как третий параметр для метода exec.

public Process exec(String command,
                String[] envp,
                File dir)
         throws IOException

Выполняет указанную командную строку в отдельном процессе с указанной средой и рабочим каталогом.

Это удобный метод. Вызов формы exec (command, envp, dir) ведет себя точно так же, как вызов exec (cmdarray, envp, dir), где cmdarray - это массив всех маркеров в команде.

Более точно, командная строка разбивается на токены, используя StringTokenizer, созданный вызовом new StringTokenizer (команда) без дальнейшей модификации категорий символов. Токены, созданные токенизатором, затем помещаются в новый массив строк cmdarray в том же порядке.

Parameters:
    command - a specified system command.
    envp - array of strings, each element of which has environment variable settings in the format name=value, or null if the subprocess should inherit the environment of the current process.
    dir - the working directory of the subprocess, or null if the subprocess should inherit the working directory of the current process. 
Returns:
    A new Process object for managing the subprocess 
Throws:
    SecurityException - If a security manager exists and its checkExec method doesn't allow creation of the subprocess 
    IOException - If an I/O error occurs 
    NullPointerException - If command is null, or one of the elements of envp is null 
    IllegalArgumentException - If command is empty

Ответ 3

См. ссылку ниже (это объясняет, как это сделать):

http://alvinalexander.com/java/edu/pj/pj010016

то есть.

String[] cmd = { "/bin/sh", "-c", "cd /var; ls -l" };
Process p = Runtime.getRuntime().exec(cmd);

Ответ 4

Эта команда работает просто отлично

Runtime.getRuntime().exec(sh -c 'cd /path/to/dir && ProgToExecute)

Ответ 5

Попробуйте использовать:

Runtime.getRuntime.exec("cmd /c cd path"); 

Это сработало

Runtime r = Runtime.getRuntime(); 
r.exec("cmd /c pdftk C:\\tmp\\trashhtml_to_pdf\\b.pdf C:\\tmp\\trashhtml_to_pdf\\a.pdf cat output C:\\tmp\\trashhtml_to_pdf\\d.pdf"); 

Ниже не работает При использовании команды array НЕ РАБОТАЕТ

String[] cmd = {"cmd /c pdftk C:\\tmp\\trashhtml_to_pdf\\b.pdf C:\\tmp\\trashhtml_to_pdf\\a.pdf cat output C:\\tmp\\trashhtml_to_pdf\\d.pdf"}; r.exec(cmd);

FYI использует утилиту для проверки ОС, если ее окна выше будут работать иначе, чем windows, удалите cmd и /c

Ответ 6

Я решил это, предложив Java-приложению sh script, который был в том же каталоге, а затем в sh script сделал "cd".

Требовалось, чтобы я делал "cd" в определенном каталоге, чтобы целевое приложение могло работать правильно.