作者:郭嘉
邮箱:[email protected]
博客:http://blog.csdn.net/allenwells
github:https://github.com/AllenWell
一 Java执行CMD命令
原理:
Process process = Runtime.getRuntime().exec("cmd order");
- cmd /c cmdorder 是执行完cmdorder命令后关闭命令窗口。
- cmd /k cmdorder 是执行完cmdorder命令后不关闭命令窗口。
- cmd /c start cmdorder 会打开一个新窗口后执行cmdorder指令,原窗口会关闭。
- cmd /k start cmdorder 会打开一个新窗口后执行cmdorder指令,原窗口不会关闭。
注意:
如果exec()中只有CMD命令,则命令会直接被执行,而不会打开命令行窗口;
举例:
下面例子实现了执行解压JAR包,并把命令行信息输到Java的图形界面的功能:
Process process = null;
try
{
process = Runtime.getRuntime().exec("jar xvf " + jarInputFile.getPath()) ;
}
catch (IOException e)
{
e.printStackTrace();
}
InputStream inputStream = process.getInputStream();
Reader reader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(reader);
try
{
for(String s = ""; ( s = bufferedReader.readLine()) != null;)
{
consoleInfo.append(s + "<br>");
}
bufferedReader.close();
reader.close();
JLabel consoleLabel = new JLabel();
consoleLabel.setText("<html>" + consoleInfo.toString() + "</html>");
}
}
catch (/ e)
{
e.printStackTrace();
}
注意:Java Swing的文字显示不支持直接“\n”换行,所以使用“”标签的形式来实现换行。
二 CMD输出信息重定向
以上程序展示的是把执行一条命令后,把命令行上的信息输出到Java的图形界面上,那么如何实现实时的检测Windows的命令行打印信息并进行输出呢?
实现方法:
Java的System类中有个out成员变量,称为标准输出流,用来把打印输出到屏幕上。上面所述的问题其实就是System.out的输出重定向问题。
System.out在Java中源码实现如下所示:
/**
* Default input stream.
*/
public static final InputStream in;
/**
* Default output stream.
*/
public static final PrintStream out;
/**
* Default error output stream.
*/
public static final PrintStream err;
private static final S