7.使用ProcessBuilder執行本地命令
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
*在J2SE5.0之前使用Runtime的exec方法執行本地命令.
*在J2Se5.0之後,可以使用ProcessBuilder執行本地命令
*它提供的功能更加豐富,能夠設定設定工作目錄、環境變數等
*本例PorcessBuilder執行Windows作業系統的"ipconfig/all"命令,獲取本機網絡卡的MAC地址
*/
/**關鍵技術剖析
*用本命令名和命令的引數選項構造ProcessBuilder物件,它的start方法執行命令,啟動一個程序,返回一個Process物件
*ProcessBuilder的environment方法獲得執行程序的環境變數
*ProcessBuilder的directory方法切換工作目錄
*Process的getInputStream方法獲得程序的標準輸出流,getErrorStream方法獲得程序的錯誤輸出流
*/
publicclass UsingProcessBuilder {
/**獲取Windows系統下的網絡卡的MAC地址*/
publicstatic List<String> getPhysicalAddress(){
Process p = null;
List<String> address = new ArrayList<String>();
try{
p = new ProcessBuilder("ipconfig","/all").start(); //執行ipconfig/all命令
}catch(IOException e){
return address;
}
byte[] b = newbyte[1024];
int readbytes = -1;
StringBuffer sb = new StringBuffer();
//讀取程序輸出值
//在JAVA IO中,輸入輸出是針對JVM而言,讀寫是針對外部資料來源而言
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){
}
}
//以下是分析輸出值,得到物理網絡卡
String rtValue = sb.toString();
int i = rtValue.indexOf("Physical Address. . . . . . . . . :");
while (i > 0){
rtValue = rtValue.substring(i + "Physical Address. . . . . . . . . :".length());
address.add(rtValue.substring(1,18));
i = rtValue.indexOf("Physical Address. . . . . . . . . :");
}
return address;
}
/**執行自定義的一個命令,該命令放在C:/temp下,並且需要兩個環境變數的支援*/
publicstaticboolean executeMyCommand1(){
//建立系統程序建立器
ProcessBuilder pb = new ProcessBuilder("myCommand","myArg1","myArg2");
Map<String, String> env = pb.environment(); //獲得程序的環境
//設定和去除環境變數
env.put("VAR1", "myValue");
env.remove("VAR0");
env.put("VAR2", env.get("VAR1") + ";");
//迭代環境變數,獲取屬性名和屬性值
Iterator it=env.keySet().iterator();
String sysatt = null;
while(it.hasNext())
{
sysatt = (String)it.next();
System.out.println("System Attribute:"+sysatt+"="+env.get(sysatt));
}
pb.directory(new File("C:/temp"));
try{
Process p = pb.start(); //得到程序例項
//等待程序執行完畢
if(p.waitFor() != 0){
//如果程序執行結果不為0,表示程序是錯誤退出的
//獲得程序例項的錯誤輸出
InputStream error = p.getErrorStream();
//do something
}
InputStream sdin = p.getInputStream(); //獲得程序例項的標準輸出
//do something
}catch(IOException e){
}catch(InterruptedException e){
}
returntrue;
}
publicstaticvoid executeMyCommand2(){
ProcessBuilder pb = null;
String sysatt = null;
try
{
//建立一個程序示例
pb = new ProcessBuilder("cmd.exe");
//獲取系統引數並列印顯示
Map<String, String> env = pb.environment();
Iterator it=env.keySet().iterator();
while(it.hasNext())
{
sysatt = (String)it.next();
System.out.println("System Attribute:"+sysatt+"="+env.get(sysatt));
}
//設定工作目錄
pb.directory(new File("d://myDir"));
Process p = pb.start();
//將要執行的Windows命令寫入
BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(p.getOutputStream()));
//'/r/n'是必須寫入的
bw.write("test.bat /r/n");
bw.write("ping -t www.yahoo.com.cn /r/n");
//flush()方法是必須呼叫的
bw.flush();
//將執行結果列印顯示
InputStream is = p.getInputStream();
InputStreamReader isr = new InputStreamReader(is, "GBK");
BufferedReader br = new BufferedReader(isr);
String line;
while ((line = br.readLine()) != null)
{
System.out.println(line);
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
publicstaticvoid main(String[] args){
List<String> address = UsingProcessBuilder.getPhysicalAddress();
for(String add : address){
System.out.printf("物理網絡卡地址: %s%n",add);
}
executeMyCommand1();
executeMyCommand2();
}
}
相關推薦
7.使用ProcessBuilder執行本地命令
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.IOException; import java.io.InputStream;
JDK5.0新特性系列---7.使用ProcessBuilder執行本地命令
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.IOException; import java.io.InputStream
java之ProcessBuilder執行系統命令
轉自:http://blog.csdn.net/yasha009/article/details/52051629 可以使用java中的ProcessBuilder執行本地命令或指令碼等工作: 以下是一個簡單的使用java呼叫本地python指令碼的例子。從某工程程式
老男孩教育每日一題-2017年5月7日-加餐-linux下面如何實現,執行rm命令,就顯示do not use rm command
linux別名 每日一題 1.題目-老男孩教育每日一題-2017年5月7日-加餐-linux下面如何實現,執行rm命令,就顯示do not use rm command2.要求結果[[email protected]/* */ ~]# rm do not use rm command3.答
框架綜合實踐(7)--批量處理命令(命令執行指令碼)
目的 自動化指令碼開發階段,我們會使用工具pycharm IDE來編輯執行指令碼,但是指令碼開發完成後,每次執行指令碼都要開啟工具就會變得很麻煩,而且pycharm IDE比較消耗資源,影響執行效率,這種情況下,我們可以使用cmd命令或者將cmd命令封裝為bat批處理指令碼來執行。 裝置連線
vue-cli 專案執行時報錯處理,'webpack-dev-server' 不是內部或外部命令,也不是可執行的程式,更換電腦執行本地的vue-cli專案報錯處理
在做vue-cli 腳手架搭建專案時,把本地專案拷回自己的電腦上執行報錯,後來經查閱解決, 報錯資訊 'webpack-dev-server' 不是內部或外部命令,也不是可執行的程式 或批處理檔案。 npm ERR! code ELIFECYCLE npm ERR! er
0 Linux下Java使用ProcessBuilder執行命令與直接Bash執行命令之間的不同(環境變數方面)
0 問題發生 xiaojietest.java package tasks; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter;
Python免祕鑰ssh遠端登入執行命令and本地執行shell命令
python遠端執行 python paramiko 模組的應用 環境 # yum install python-dev # yum install python-devel # pi
java 執行linux 本地命令
public static String executeCMD(final String[] cmdStrArr) { StringBuffer resBuf = new StringBuffer(); Runtime rt = Ru
java執行cmd命令
spa dbca script dmgr share pub pdm meeting 碎片 從網上找的java執行cmd命令的文章,摘抄一段。 java的Runtime.getRuntime().exec(commandStr)可以調用執行cmd指令。cmd /c dir
Centos 執行shell命令返回127錯誤
建數據庫 mysq data 存在 思路 功能 自動創建 運行 用戶 shell腳本功能:連接mysql,自動創建數據庫,腳本如下 mysql -h$MYSQL_IP -u$MYSQL_USER -p$MYSQL_PASSWORD --default-character-s
php 執行shell命令 打印錯誤信息
信息 資源 null function $cmd = "rm 1.txt";//刪除一個不存在的文件,查看報錯信息 $res = doShell($cmd); var_dump($res); //該函數沒有限制條件,可以直接放在代碼中使用 function doShell($cmd,$cwd=
c# 設置和取消文件夾共享及執行Dos命令
urn cati 如果 llc seo value close 輸出 dos命令 /// <summary> /// 設置文件夾共享 /// </summary> /// <pa
PHP執行系統命令的有幾個常用的函數
exe 自動 文件操作 nal 外部命令 中間 ring 打開 lcm PHP執行系統命令的有幾個常用的函數,如有:system函數、exec函數、popen函數,passthru,shell_exec函數他們都可以執行系統命令,不過前提時必須系統給了權限了哦。 syste
Mysql缺少可執行的命令
nbsp not sql命令 found linux1 not found 題解 inux 找不到 MySQL問題解決:-bash:mysql:command not found 問題: [[email protected]/* */ /]# mys
shell--7、Shell test 命令
shell test 命令Shell中的 test 命令用於檢查某個條件是否成立,它可以進行數值、字符和文件三個方面的測試。數值測試參數說明-eq等於則為真-ne不等於則為真-gt大於則為真-ge大於等於則為真-lt小於則為真-le小於等於則為真實例演示:num1=100 num2=100 if test $
java代碼中執行liunx命令
number sta stream mod ces linu pla comm shell public static String runShell(String command){ try{ String[] commands = isLinux
Esper調用Java代碼執行系統命令
java esper 系統 Esper語言是可以調用高級語言的靜態方法的:以調用Java的靜態方法執行系統命令為例:select Runtime.getRuntime().exec(\"calc\"),avg(price) from " + product + ".win:length_batch
python之執行shell命令
python[[email protected]/* */ ~]# python Python 2.7.5 (default, Sep 15 2016, 22:37:39) [GCC 4.8.5 20150623 (Red Hat 4.8.5-4)] on linux2 Type "help",
Java 7 可執行的 Nashorn,取代 Rhino
eof 不能 name mir 正式版 data- fin down 怎麽辦 驚現有人把 OpenJDK 上的 Nashorn dump 下來,使得 Java 7 都能夠使用。源代碼在 https://bitbucket.org/ramonza/nashorn-back