如何使用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。

当前工作目录很重要的一种情况是执行外部进程(使用ProcessBuilderRuntime.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