java调用本地shell_java通过ProcessBuilder执行本地shell命令 获取ip配置信息
[java]代碼庫import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.Map;
/**
* 通過ProcessBuilder執(zhí)行本地命令。此類用于創(chuàng)建操作系統(tǒng)進程。 獲取本機的ip配置信息
*
* 每個進程生成器管理這些進程屬性: (1)命令 是一個字符串列表,它表示要調用的外部程序文件及其參數(shù)(如果有) (2)環(huán)境 是從變量 到值
* 的依賴于系統(tǒng)的映射。初始值是當前進程環(huán)境的一個副本. (3)工作目錄。默認值是當前進程的當前工作目錄,通常根據(jù)系統(tǒng)屬性 user.dir 來命名.
* (4)redirectErrorStream 屬性。最初,此屬性為 false, 意思是子進程的標準輸出和錯誤輸出被發(fā)送給兩個獨立的流, 這些流可以通過
* Process.getInputStream() 和 Process.getErrorStream() 方法來訪問。 如果將值設置為
* true,標準錯誤將與標準輸出合并。這使得關聯(lián)錯誤消息和相應的輸出變得更容易。 在此情況下,合并的數(shù)據(jù)可從
* Process.getInputStream() 返回的流讀取, 而從 Process.getErrorStream() 返回的流讀取將直接到達文件尾。
*/
public class UsingProcessBuilder {
/**
* 獲取Windows系統(tǒng)下的網(wǎng)卡的MAC地址
*
* @return
*/
public static String getPhysicalAddress() {
Process p = null;
try {
// 執(zhí)行ipconfig /all命令
p = new ProcessBuilder("ipconfig", "/all").start();
} catch (IOException e) {
return "";
}
byte[] b = new byte[1024];
int readbytes = -1;
StringBuffer sb = new StringBuffer();
// 讀取進程輸出值
InputStream in = p.getInputStream();
try {
while ((readbytes = in.read(b)) != -1) {
sb.append(new String(b, 0, readbytes));
}
} catch (IOException e1) {
} finally {
try {
in.close();
} catch (IOException e2) {
}
}
return sb.toString();
}
/**
* 執(zhí)行自定義的一個命令,該命令放在C:/temp下,并且需要2個環(huán)境變量的支持。
*/
public static boolean executeMyCommand() {
// 創(chuàng)建系統(tǒng)進程創(chuàng)建器
ProcessBuilder pb = new ProcessBuilder("myCommand", "myArg1", "myArg2");
// 獲得進程的環(huán)境
Map env = pb.environment();
// 設置和去除環(huán)境變量
env.put("VAR1", "myValue");
env.remove("VAR0");
env.put("VAR2", env.get("VAR1") + ";");
// 切換工作目錄
pb.directory(new File("C:/temp"));
try {
// 得到進程實例
Process p = pb.start();
// 等待該進程執(zhí)行完畢
if (p.waitFor() != 0) {
// 如果進程運行結果不為0,表示進程是錯誤退出的
// 獲得進程實例的錯誤輸出
InputStream error = p.getErrorStream();
// do something
}
// 獲得進程實例的標準輸出
InputStream sdin = p.getInputStream();
} catch (IOException e) {
} catch (InterruptedException e) {
}
return true;
}
public static void main(String[] args) {
String address = UsingProcessBuilder.getPhysicalAddress();
System.out.println(address);
}
}
總結
以上是生活随笔為你收集整理的java调用本地shell_java通过ProcessBuilder执行本地shell命令 获取ip配置信息的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java求反字符_java 反取字符串
- 下一篇: poj 1006 java_POJ 10