JAVA执行外部命令并获取执行结果

发表于 2019-06-10  340 次阅读


最近遇到了一个把命令行执行结果存到数据库中的需求,执行的命令行并非是Windows默认的命令,因此用java.lang.Process的接口无法直接获取命令,在stackoverflow聊天室发问之后研究出了一个结果……

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package test;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class Sugars {
   
   
    public static void main(String[] args) {
        BufferedReader br = null;
        try {
            File file = new File("D:\\jshow\\newImpl\\temp\\temp.tmp");//新建一个用来存储结果的缓存文件
            if(!file.exists()) {
                file.createNewFile();
            }
            ProcessBuilder pb = new ProcessBuilder().command("cmd.exe", "/c", "java -version").inheritIO();//试一个java -version
            pb.redirectErrorStream(true);//这里是把控制台中的红字变成了黑字,用通常的方法其实获取不到,控制台的结果是pb.start()方法内部输出的,简直就像是自欺欺人。
            pb.redirectOutput(file);//把执行结果输出。
            pb.start().waitFor();//等待语句执行完成,否则可能会读不到结果。
            InputStream in = new FileInputStream(file);
            br= new BufferedReader(new InputStreamReader(in));
            String line = null;
            while((line = br.readLine()) != null) {
                System.out.println(line);
            }
            file.delete();//卸磨杀驴。
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if(br != null) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
本站文章基于国际协议BY-NA-SA 4.0协议共享;
如未特殊说明,本站文章皆为原创文章,请规范转载。

0

引导着你的王道的狂视幻像(Disorder Eye)载着我们的梦来到极贫乏世界。