java通过Runtime类可以调用环境中的可执行程序。
1、执行DOS命令
exec("cmd.exe /c dir"); 其中参数“/c”表示命令执行后立即关闭窗口
2、调用可执行命令
exec("cmd.exe /c test.bat");
exec(" c:\\Program Files\\Microsoft Office\\office\\winword.exe .\\a.doc");
执行切换目录操作不能如此进行
exec("cmd.exe /c cd d:\\");
exec("cmd.exe /c dir");
经过网上查询,可将命令写进文件(exec.bat)保存在文件系统中后,再执行exec.bat。
代码如下:
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
public class Test {
public static void main(String args[]) {
Runtime r = Runtime.getRuntime();
try {
Test t = new Test();
String userdir = System.getProperty("user.dir");//获取当前工作目录
//开始生成脚本文件
File f = new File(userdir+"\\exec.bat");
FileOutputStream fos = new FileOutputStream(f);
fos.write("c: \n".getBytes());
fos.write("javac *.java \n".getBytes());
fos.write("java HelloWorld badfish \n".getBytes());
fos.flush();
fos.close();
//执行脚本文件
t.exec(r,userdir+"\\exec.bat");
//删除脚本文件
f.delete();
} catch (Exception e) {
e.printStackTrace();
System.out.println("Error executing notepad.");
}
}
//执行命令同时打印屏幕信息
public void exec(Runtime r , String arg) throws Exception{
Process p = null;
p = r.exec(arg);
InputStream is = p.getInputStream();
String s = null;
LineNumberReader lnr = new LineNumberReader(new InputStreamReader(is));
while( (s = lnr.readLine()) != null ){
System.out.println(s);
}
System.out.println("~~~");
}
}