参见:https://blog.csdn.net/lixingshi/article/details/50467840
public static void runtimeCommand() throws Exception {
Process process = Runtime.getRuntime().exec("cmd.exe /c dir");
int status = process.waitFor();
System.out.println(status);
InputStream in = process.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String line = br.readLine();
while(line!=null) {
System.out.println(line);
line = br.readLine();
}
}
命令行中使用/c关闭执行完毕的窗口,否则无法获取输入流。但是在Linux下面就可以直接使用如下代码获取输入流:
Process process = Runtime.getRuntime().exec("ls");
int status = process.waitFor();
System.out.println(status);
InputStream in = process.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String line = br.readLine();
while(line!=null) {
System.out.println(line);
line = br.readLine();
}
还可以使用ProcessBuilder进行创建进程,这种方更灵活。代码如下:
public static void processBuilderCommand() throws Exception {
List<String> commands = new ArrayList<>();
commands.add("cmd.exe");
commands.add("/c");
commands.add("dir");
commands.add("E:\\flink");
ProcessBuilder pb =new ProcessBuilder(commands);
//可以修改进程环境变量
pb.environment().put("DAXIN_HOME", "/home/daxin");
System.out.println(pb.directory());
Process process = pb.start();
int status = process.waitFor();
System.out.println(pb.environment());
System.out.println(status);
InputStream in = process.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String line = br.readLine();
while(line!=null) {
System.out.println(line);
line = br.readLine();
}
}
调用java命令执行class文件并获取输出:
public static void processBuilderCommand() throws Exception {
List<String> commands = new ArrayList<>();
commands.add("cmd.exe");
commands.add("/c");
commands.add("java HelloWorld");
ProcessBuilder pb =new ProcessBuilder(commands);
pb.directory(new File("C:\\Users\\liuguangxin\\oxygen--workspace\\java8\\bin\\"));//设置工作目录
Process process = pb.start();
int status = process.waitFor();
InputStream in = process.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String line = br.readLine();
while(line!=null) {
System.out.println(line);
line = br.readLine();
}
}
java C:\\Users\\liuguangxin\\oxygen--workspace\\java8\\bin\\HelloWorld会将目录作为类名一起解析故无法执行。