如何使用Java运行时使用“cd”命令?
我创build了一个独立的Java应用程序,我试图在Ubuntu 10.04terminal中使用“cd”命令来更改目录。 我已经使用了下面的代码。
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
任何人都可以请告诉我如何实现它?
没有可执行文件叫做cd
,因为它不能在一个单独的进程中实现。
问题是每个进程都有自己的当前工作目录,并且将cd
作为一个单独的进程来执行只会改变那个进程当前的工作目录。
在Java程序中,你不能改变你当前的工作目录,你不需要。 只需使用绝对文件path。
当前工作目录很重要的一种情况是执行外部进程(使用ProcessBuilder
或Runtime.exec()
)。 在这些情况下,您可以明确指定用于新启动的进程的工作目录(分别为ProcessBuilder.directory()
和三参数Runtime.exec()
)。
注意:当前工作目录可以从系统属性 user.dir
读取。 您可能会想要设置该系统属性。 请注意,这样做会导致非常不好的不一致 ,因为它不是可写的 。
你是否已经探索了这个执行命令为一个Java运行时,创build一个文件对象与你想要“CD”的path,然后input作为exec方法的第三个参数。
public Process exec(String command, String[] envp, File dir) throws IOException
使用指定的环境和工作目录在单独的进程中执行指定的string命令。
这是一个方便的方法。 formsexec(command,envp,dir)的调用与调用exec(cmdarray,envp,dir)的方式完全相同,其中cmdarray是命令中所有令牌的数组。
更准确地说,命令string被分割为使用由新的StringTokenizer(command)调用创build的StringTokenizer的令牌,而不需要进一步修改字符类别。 然后将令牌生成器生成的令牌以相同的顺序放置在新的string数组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
看下面的链接(这个解释了怎么做):
http://alvinalexander.com/java/edu/pj/pj010016
即:
String[] cmd = { "/bin/sh", "-c", "cd /var; ls -l" }; Process p = Runtime.getRuntime().exec(cmd);
这个命令工作得很好
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");
下面没有工作虽然使用数组命令没有工作
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