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