[Java] java通过ProcessBuilder执行本地shell命令 获取ip配置信息 →→→→→进入此内容的聊天室

来自 , 2019-09-06, 写在 Java, 查看 109 次.
URL http://www.code666.cn/view/c9892a98
  1. import java.io.File;
  2. import java.io.IOException;
  3. import java.io.InputStream;
  4. import java.util.Map;
  5.  
  6. /**
  7.  * 通过ProcessBuilder执行本地命令。此类用于创建操作系统进程。 获取本机的ip配置信息
  8.  *
  9.  * 每个进程生成器管理这些进程属性: (1)命令 是一个字符串列表,它表示要调用的外部程序文件及其参数(如果有) (2)环境 是从变量 到值
  10.  * 的依赖于系统的映射。初始值是当前进程环境的一个副本. (3)工作目录。默认值是当前进程的当前工作目录,通常根据系统属性 user.dir 来命名.
  11.  * (4)redirectErrorStream 属性。最初,此属性为 false, 意思是子进程的标准输出和错误输出被发送给两个独立的流, 这些流可以通过
  12.  * Process.getInputStream() 和 Process.getErrorStream() 方法来访问。 如果将值设置为
  13.  * true,标准错误将与标准输出合并。这使得关联错误消息和相应的输出变得更容易。 在此情况下,合并的数据可从
  14.  * Process.getInputStream() 返回的流读取, 而从 Process.getErrorStream() 返回的流读取将直接到达文件尾。
  15.  */
  16. public class UsingProcessBuilder {
  17.  
  18.         /**
  19.          * 获取Windows系统下的网卡的MAC地址
  20.          *
  21.          * @return
  22.          */
  23.         public static String getPhysicalAddress() {
  24.                 Process p = null;
  25.  
  26.                 try {
  27.                         // 执行ipconfig /all命令
  28.                         p = new ProcessBuilder("ipconfig", "/all").start();
  29.                 } catch (IOException e) {
  30.                         return "";
  31.                 }
  32.                 byte[] b = new byte[1024];
  33.                 int readbytes = -1;
  34.                 StringBuffer sb = new StringBuffer();
  35.                 // 读取进程输出值
  36.                 InputStream in = p.getInputStream();
  37.                 try {
  38.                         while ((readbytes = in.read(b)) != -1) {
  39.                                 sb.append(new String(b, 0, readbytes));
  40.                         }
  41.  
  42.                 } catch (IOException e1) {
  43.                 } finally {
  44.                         try {
  45.                                 in.close();
  46.                         } catch (IOException e2) {
  47.                         }
  48.                 }
  49.  
  50.                 return sb.toString();
  51.         }
  52.  
  53.         /**
  54.          * 执行自定义的一个命令,该命令放在C:/temp下,并且需要2个环境变量的支持。
  55.          */
  56.         public static boolean executeMyCommand() {
  57.                 // 创建系统进程创建器
  58.                 ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2");
  59.                 // 获得进程的环境
  60.                 Map<String, String> env = pb.environment();
  61.                 // 设置和去除环境变量
  62.                 env.put("VAR1", "myValue");
  63.                 env.remove("VAR0");
  64.                 env.put("VAR2", env.get("VAR1") + ";");
  65.                 // 切换工作目录
  66.                 pb.directory(new File("C:/temp"));
  67.                 try {
  68.                         // 得到进程实例
  69.                         Process p = pb.start();
  70.                         // 等待该进程执行完毕
  71.                         if (p.waitFor() != 0) {
  72.                                 // 如果进程运行结果不为0,表示进程是错误退出的
  73.                                 // 获得进程实例的错误输出
  74.                                 InputStream error = p.getErrorStream();
  75.                                 // do something
  76.                         }
  77.                         // 获得进程实例的标准输出
  78.                         InputStream sdin = p.getInputStream();
  79.  
  80.                 } catch (IOException e) {
  81.                 } catch (InterruptedException e) {
  82.                 }
  83.                 return true;
  84.         }
  85.  
  86.         public static void main(String[] args) {
  87.                 String address = UsingProcessBuilder.getPhysicalAddress();
  88.  
  89.                 System.out.println(address);
  90.  
  91.         }
  92. }

回复 "java通过ProcessBuilder执行本地shell命令 获取ip配置信息"

这儿你可以回复上面这条便签

captcha