Java执行CMD命令
参见: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\\daxin\\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\\daxin\\oxygen--workspace\\java8\\bin\\HelloWorld会将目录作为类名一起解析故无法执行。