java Runtime、Process类,可以调用外部命令,主要方法是:
?
?
Runtime:
?
1.没有构造函数,只有这个静态方法 :public static Runtime getRuntime()返回与当前 Java 应用程序相关的运行时对象
?
2.执行外部命令,传递字符串参数,返回Process类:
?
public Process exec(String command)throws IOException在单独的进程中执行指定的字符串命令
?
?
Process:
?
1.获取子进程的错误流:
?
public abstract InputStream getErrorStream();
?
获取子进程的错误流,错误流获得由该 Process 对象表示的进程的错误输出流传送的数据。
?
2.获取子进程的输入流:
?
public abstract InputStream getInputStream();
?
获取子进程的输入流,输入流获得由该 Process 对象表示的进程的标准输出流。?
?
例子:
?
1->打开一个记事本程序:
?
Runtime runtime = Runtime.getRuntime(); runtime.exec("notepad");//打开一个记事本?
?
2->关机操作:
?
Runtime runtime = Runtime.getRuntime(); runtime.exec("shutdown -s");//关机
?
?3->运行cmd操作,为了立即关闭cmd窗口,写法应该是:cmd /c cmd命令,或者把批命令写在一个bat文件里,进行调用批命令
?
a):调用cmd命令,获取调用的输入流,并输出:cmd dir
?
Runtime runtime = Runtime.getRuntime(); runtime.exec("cmd /c dir"); InputStream input = process.getInputStream(); BufferedReader buffered = new BufferedReader(new InputStreamReader(input)); String str; while((str=buffered.readLine())!=null){ System.out.println(str); }?
?
b):调用cmd命令,获取调用的错误输入流,并输出:cmd 错误指令
?
Runtime runtime = Runtime.getRuntime(); runtime.exec("cmd /c test"); InputStream input = process.getErrorStream(); BufferedReader buffered = new BufferedReader(new InputStreamReader(input)); String str; while((str=buffered.readLine())!=null){ System.out.println(str); }
?
?c)'综合下:调用javac 编译一个java文件
?
public static void test(String fileName)throws Exception{ Runtime runtime = Runtime.getRuntime();//创建runtime实例 Process process = runtime.exec("javac "+fileName); InputStream errStream = process.getErrorStream();//错误流 InputStream inputStream = process.getInputStream();//输入流 //封装下 BufferedReader errReader = new BufferedReader(new InputStreamReader(errStream)); BufferedReader inputReader = new BufferedReader(new InputStreamReader(inputStream)); String str; //把信息纪录到文件里 File errfile = new File("errFile.txt"); File inputfile = new File("inputFile.txt"); BufferedWriter errWrite = new BufferedWriter(new FileWriter(errfile)); BufferedWriter inputWriter = new BufferedWriter(new FileWriter(inputfile)); while((str=errReader.readLine())!=null){ System.out.println(str); errWrite.write(str); errWrite.newLine(); errWrite.flush(); } while((str=inputReader.readLine())!=null){ System.out.println(str); inputWriter.write(str); inputWriter.newLine(); inputWriter.flush(); } //不要忘了关闭 errReader.close(); inputReader.close(); errWrite.close(); inputWriter.close(); }
?
?注释:如果调用java命令时,在同一目录下有已编译好的class文件,只需传递文件名,不需路径信息
?
?
?