Как использовать команду " cd " с помощью Java runtime?

Я создал автономное приложение 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

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

6 ответов


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

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

в Java-программе вы не могу измените текущий рабочий каталог, и вам это не понадобится. Просто используйте absolute file пути.

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

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


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

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

т. е. :

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

изучили ли вы эту команду exec для среды выполнения java, создайте объект файла с путем, к которому вы хотите "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 (command) без дальнейшего изменения категорий символов. Маркеры, созданные tokenizer, затем помещаются в новый строковый массив 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

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

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

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

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


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

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 am с помощью утилиты для проверки ОС, если его windows выше будет работать для других, чем windows remove cmd и / c