Java ProcessBuilder示例大全
下文是笔者讲述ProcessBuilder示例大讲解,如下所示
ProcessBuilder类简介
ProcessBuilder命令的功能: 使用ProcessBuilder轻松调用外部命令 ProcessBuilder processBuilder = new ProcessBuilder(); // -- Linux -- // Run a shell command processBuilder.command("bash", "-c", "ls /home/java265/"); // Run a shell script processBuilder.command("path/to/hello.sh"); // -- Windows -- // Run a command processBuilder.command("cmd.exe", "/c", "dir C:\\Users\\java265"); // Run a bat file processBuilder.command("C:\\Users\\java265\\hello.bat"); Process process = processBuilder.start();
ProcessBuilder运行ping命令
package com.java265.process; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class ProcessBuilderExample1 { public static void main(String[] args) { ProcessBuilder processBuilder = new ProcessBuilder(); // windows下运行cmd processBuilder.command("cmd.exe", "/c", "ping -n 3 java265.com"); try { Process process = processBuilder.start(); // 阻塞读取 BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; while ((line = reader.readLine()) != null) { System.out.println(line); } int exitCode = process.waitFor(); System.out.println("\nExited with error code : " + exitCode); } catch (IOException e) { e.printStackTrace(); } catch (InterruptedException e) { e.printStackTrace(); } } }
Ping +线程示例
package com.java265.process; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.util.list; import java.util.concurrent.*; import java.util.stream.Collectors; public class ProcessBuilderExample2 { public static void main(String[] args) { ExecutorService pool = Executors.newSingleThreadExecutor(); ProcessBuilder processBuilder = new ProcessBuilder(); // windows下运行cmd processBuilder.command("cmd.exe", "/c", "ping -n 3 java265.com"); try { Process process = processBuilder.start(); System.out.println("process ping..."); ProcessReadTask task = new ProcessReadTask(process.getInputStream()); Future<list<string>> future = pool.submit(task); //不阻塞 System.out.println("process task1..."); System.out.println("process task2..."); List<string> result = future.get(5, TimeUnit.SECONDS); for (String s : result) { System.out.println(s); } } catch (Exception e) { e.printStackTrace(); } finally { pool.shutdown(); } } private static class ProcessReadTask implements Callable<list<string>> { private InputStream inputStream; public ProcessReadTask(InputStream inputStream) { this.inputStream = inputStream; } @Override public List<string> call() { return new BufferedReader(new InputStreamReader(inputStream)) .lines() .collect(Collectors.toList()); } } }
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。