【发布时间】:2011-07-18 15:17:35
【问题描述】:
我正在尝试直接通过 Windows 上的 CMD(Linux 上的终端)运行命令。我有以下代码。它的表现非常奇怪。首先,程序运行时不打印任何内容。其次,当调试和单步执行时,程序会打印默认的 CMD 文本和输入行。最后,我似乎无法写入 CMD,所以它会执行命令。这是我的代码。我猜这可能是线程问题,但我不熟悉运行时。
Runtime r = Runtime.getRuntime();
try {
Process p = r.exec("cmd");
InputStream iStream = p.getInputStream();
BufferedReader sReader = new BufferedReader(new InputStreamReader(iStream));
while(sReader.ready()) {
System.out.print((char)sReader.read());
}
OutputStream oStream = p.getOutputStream();
BufferedWriter sWriter = new BufferedWriter(new OutputStreamWriter(oStream));
sWriter.write("mkdir test");
sWriter.newLine();
while(sReader.ready()) {
System.out.print((char)sReader.read());
}
} catch(Exception e) {
e.printStackTrace();
}
调试和单步执行时我的输出,(运行时不显示输出)
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.
D:\workspaces\Maven\Command Line>
【问题讨论】:
-
你使用
cmd而不是直接运行每个命令有什么原因吗? -
@unholysampler:如果打算让它在 Windows 上运行,则需要以这种方式完成(或将
cmd /c mkdir test作为单行)。mkdir内置在 Windows 命令处理器中;它不是一个单独的可执行文件。当然,为什么你需要使用cmdinstead of the standard library 运行mkdir命令是我无法理解的。 -
我没有使用 mkdir,我只是将它用于一个简单的示例。实际的 CMD 命令又长又丑,带有动态值
-
@unholysampler - /c 正是我所需要的。为了能够将命令直接插入 CMD 并阅读它打印的内容。谢谢