Java 调用系统命令 Runtime Process ProcessBuilder
来源:互联网 发布:带着淘宝穿古代txt书包 编辑:程序博客网 时间:2024/05/17 05:25
Java 调用系统命令 Cmder
包括对waitFor()
阻塞的处理
package southday.java.util;import java.io.BufferedReader;import java.io.File;import java.io.InputStream;import java.io.InputStreamReader;import java.util.Arrays;import java.util.List;/** * 命令行工具 * @author southday * @date 2017年3月7日 */public class Cmder { public Cmder() { super(); } private static class StreamReaderThread implements Runnable { InputStream ins = null; public StreamReaderThread(InputStream ins) { this.ins = ins; } @Override public void run() { BufferedReader br = new BufferedReader(new InputStreamReader(ins)); try { String line = null; while ((line = br.readLine()) != null) { System.out.println(line); } } catch (Exception e) { e.printStackTrace(); } finally { FileUtil.closeSource(ins); FileUtil.closeSource(br); } } } /** * 执行系统命令 * @param cmd 完整命令,如:"tar -xvf sql_scripts.tar -C ." * @param directory 命令在指定目录下执行 * @return */ public static boolean exec(String cmd, String directory) { List<String> cmds = Arrays.asList(cmd.split("\\s+")); return exec(cmds, directory); } /** * 执行系统命令 * @param cmds 完整命令以空格分割得到List * @param directory 命令在指定目录下执行 * @return */ public static boolean exec(List<String> cmds, String directory) { printCurrentDIR(directory); printCmd(cmds); try { ProcessBuilder procBuilder = new ProcessBuilder(cmds); if (directory != null && directory.trim().length() > 1) { procBuilder.directory(new File(directory)); } procBuilder.redirectErrorStream(true); Process proc = procBuilder.start(); new Thread(new StreamReaderThread(proc.getInputStream())).start(); new Thread(new StreamReaderThread(proc.getErrorStream())).start(); proc.waitFor(); proc.destroy(); if (proc.exitValue() != 0) { return false; } } catch (Exception e) { e.printStackTrace(); return false; } return true; } /** * 打印命令信息 * @param cmds */ public static void printCmd(List<String> cmds) { StringBuilder sb = new StringBuilder(); for (String s : cmds) { sb.append(s + " "); } System.out.println("[cmd] -> " + sb.toString()); } /** * 打印命令执行的当前目录 * @param directory */ private static void printCurrentDIR(String directory) { if (directory == null || directory.trim().length() < 1) { directory = System.getProperty("user.dir"); } System.out.println("[directory] -> " + directory); }}
0 0
- Java 调用系统命令 Runtime Process ProcessBuilder
- Java进程Runtime、Process、ProcessBuilder调用外部程序
- Java 使用Runtime.getRuntime.exec 和 ProcessBuilder 调用外部命令
- [Java][Android][Process] ProcessBuilder与Runtime区别
- [Java][Android][Process] ProcessBuilder与Runtime区别
- [Java][Android][Process] ProcessBuilder与Runtime区别
- java之ProcessBuilder执行系统命令
- ProcessBuilder 、Runtime和Process 的区别
- ProcessBuilder 、Runtime和Process 的区别
- Java中的Process和ProcessBuilder
- Java中的Process和ProcessBuilder
- Java中的Process和ProcessBuilder
- Java中Process和Runtime()使用,以及调用cmd命令阻塞在process.waitfor( )的问题解决
- Java中Process和Runtime()使用,以及调用cmd命令阻塞在process.waitfor( )的问题解决
- java Runtime.getRuntime().exec 调用系统脚本/命令注意事项
- java Runtime.getRuntime().exec 调用系统脚本/命令注意事项
- java Runtime.getRuntime().exec 调用系统脚本/命令注意事项
- java Runtime调用Dos命令
- 9 &与&&有什么区别?| 内部类 | 泛型
- C++三种工厂模式介绍及其区别
- python3 调用百度翻译API翻译英文字幕
- Android Animation 动画(二)--Drawable动画
- 当公有云遇到cloudinit,将变的安全可信
- Java 调用系统命令 Runtime Process ProcessBuilder
- 一个多标签页、可输入网址可前进后退刷新的简易浏览器
- PCB导出BOM提示ActiveX失败
- cocos2dx开发配置
- jnjj
- 在Windows10上的虚拟机安装Mac OS X 10.11
- RPG开发日记
- QT系列:MinGW与MSVC编译的区别
- android画一个简单的界面