将进程从不同目录运行到 Java 程序工作目录的一种方法是更改目录,然后在同一命令行中运行该进程。您可以通过运行命令行(如 .cmd.execd some_directory && some_program
下面的示例更改为其他目录,并从那里运行。诚然,我可以只使用该目录而无需使用它,但这只是一个例子:dirdircd
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);
        }
    }
}
另请注意,我正在使用 a 来运行该命令。除此之外,这允许我通过调用将进程的标准错误重定向到其标准输出。这样做只能给我一个可以读取的流。ProcessBuilderredirectErrorStream(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    <DIR>          .
29/07/2011  11:03    <DIR>          ..
21/01/2011  20:37    <DIR>          100
21/01/2011  20:35    <DIR>          80
21/01/2011  20:35    <DIR>          90
21/01/2011  20:39    <DIR>          MSSQL10_50.SQLEXPRESS
               0 File(s)              0 bytes
               6 Dir(s)  209,496,424,448 bytes free