从不同目录运行进程到Java程序工作目录的一种方法是更改目录,然后在同一命令行中运行该进程。你可以通过cmd.exe运行命令行,如cd some_directory && some_program.
下面的示例更改到另一个目录并运行dir从那里开始。无可否认,我可以dir那个目录不需要cd但这只是一个例子:import java.io.*;public class CmdTest {
public static void main(String[] args) throws Exception {
ProcessBuilder builder = new ProcessBuilder(
"cmd.exe", "/c", "cd \"C:\\Program Files\\Microsoft SQL Server\" && dir");
builder.redirectErrorStream(true);
Process p = builder.start();
BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while (true) {
line = r.readLine();
if (line == null) { break; }
System.out.println(line);
}
}}
还请注意,我使用的是ProcessBuilder运行命令。除其他外,这允许我将进程的标准错误重定向到其标准输出,方法是调用redirectErrorStream(true)..这样做只给了我一个可读的流。
这在我的机器上给出了以下输出:C:\Users\Luke\StackOverflow>java CmdTest
Volume in drive C is Windows7
Volume Serial Number is D8F0-C934
Directory of C:\Program Files\Microsoft SQL Server
29/07/2011 11:03
29/07/2011 11:03
21/01/2011 20:37
21/01/2011 20:35
21/01/2011 20:35
21/01/2011 20:39
0 File(s) 0 bytes
6 Dir(s) 209,496,424,448 bytes free