Как использовать команду " 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