从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);
}
}
}
还要注意,我正在使用a 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 <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