主题:java 调用外部程序
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->打开一个记事本程序:
Java代码
1. Runtime runtime = Runtime.getRuntime();
2. runtime.exec("notepad");//打开一个记事本
2->关机操作:
Java代码
1. Runtime runtime = Runtime.getRuntime();
2. runtime.exec("shutdown -s");//关机
3->运行cmd操作,为了立即关闭cmd窗口,写法应该是:cmd /c cmd命令,或者把批命令写在一个bat文件里,进行调用批命令
a):调用cmd命令,获取调用的输入流,并输出:cmd dir
Java代码
1. Runtime runtime = Runtime.getRuntime();
2. runtime.exec("cmd /c dir");
3. InputStream input = process.getInputStream();
4. BufferedReader buffered = new BufferedReader(new InputStreamReader(input));
5. String str;
6. while((str=buffered.readLine())!=null){
7. System.out.println(str);
8. }
b):调用cmd命令,获取调用的错误输入流,并输出:cmd 错误指令
Java代码
1. Runtime runtime = Runtime.getRuntime();
2. runtime.exec("cmd /c test");
3. InputStream input = process.getErrorStream();
4. BufferedReader buffered = new BufferedReader(new InputStreamReader(input));
5. String str;
6. while((str=buffered.readLine())!=null){
7. System.out.println(str);
8. }
c)'综合下:调用javac 编译一个java文件
Java代码
1. public static void test(String fileName)throws Exception{
2. Runtime runtime = Runtime.getRuntime();//创建runtime实例
3.
4. Process process = runtime.exec("javac "+fileName);
5.
6. InputStream errStream = process.getErrorStream();//错误流
7. InputStream inputStream = process.getInputStream();//输入流
8.
9. //封装下
10. BufferedReader errReader = new BufferedReader(new InputStreamReader(errStream));
11. BufferedReader inputReader = new BufferedReader(new InputStreamReader(inputStream));
12.
13.
14. String str;
15. //把信息纪录到文件里
16. File errfile = new File("errFile.txt");
17. File inputfile = new File("inputFile.txt");
18. BufferedWriter errWrite = new BufferedWriter(new FileWriter(errfile));
19. BufferedWriter inputWriter = new BufferedWriter(new FileWriter(inputfile));
20. while((str=errReader.readLine())!=null){
21. System.out.println(str);
22. errWrite.write(str);
23. errWrite.newLine();
24. errWrite.flush();
25. }
26. while((str=inputReader.readLine())!=null){
27. System.out.println(str);
28. inputWriter.write(str);
29. inputWriter.newLine();
30. inputWriter.flush();
31. }
32. //不要忘了关闭
33. errReader.close();
34. inputReader.close();
35. errWrite.close();
36. inputWriter.close();
37. }
注释:如果调用java命令时,在同一目录下有已编译好的class文件,只需传递文件名,不需路径信息
QQ 744437114
疯狂软件官网:www.fkjava.org
疯狂java视频 android视频:http://www.fkjava.org/video.html