• 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\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会将目录作为类名一起解析故无法执行。

  • 相关阅读:
    软件设计的哲学:第十七章 一致性
    软件设计的哲学:第十六章 修改现有代码
    软件设计的哲学: 第十五章 先写注释
    软件设计的哲学:第十四章 选个好名字
    软件设计的哲学:第十三章 注释应该描述代码中隐藏的内容
    软件设计的哲学:第二十章 为什么要写注释
    软件设计的哲学:第十一章 两次设计
    软件设计的哲学: 第十章 定义不存在错误
    软件设计的哲学: 第九章 合并还是分解
    软件设计的哲学:第八章 降低复杂性
  • 原文地址:https://www.cnblogs.com/leodaxin/p/8991628.html
Copyright © 2020-2023  润新知