最好的執行系統指令的方法就是寫個bat檔案或是shell腳本。然後調用,那樣修改和實作就簡點多了。
現在執行外部指令,主要的方式,還是通過調用所在平台的SHELL去完成,WINDOWS下面就用CMD,LINUX或者是UNIX下面就用SHELL,下面示範一個LINUX下面用SHELL的調用,并把結果回顯到控制台上,其它的應用程式類。
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class RuntimeTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Process process;
//String cmd = "ifconfig";//ok
//String cmd = "sar -u 1 1| awk 'NR==4 {print $8}'";//空白。管道不支援
String cmd = "/home/heyutao/workspace/ChunkOperator/sh/cpu.sh";//ok
try {
// 使用Runtime來執行command,生成Process對象
Runtime runtime = Runtime.getRuntime();
process = runtime.exec(cmd);
// 取得指令結果的輸出流
InputStream is = process.getInputStream();
// 用一個讀輸出流類去讀
InputStreamReader isr = new InputStreamReader(is);
// 用緩沖器讀行
BufferedReader br = new BufferedReader(isr);
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
is.close();
isr.close();
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
cpu.sh的内容:
#!/bin/sh
#top
cpu=$(sar -u 1 1| awk 'NR==4 {print $8}')
ip=$(ifconfig | grep -E 'inet addr|inet 位址'| grep -v '127.0.0.1' | awk -F ':' '{print $2}' | awk '{print $1}')
echo "cpu:$ip:$cpu"
執行結果如下:
cpu:59.64.158.126:80.68
Sun的doc裡其實說明還有其他的用法:
exec(String[] cmdarray, String[] envp, File dir)
Executes the specified command and arguments in a separate process with the specified environment and working directory.
那個dir就是調用的程式的工作目錄,這句其實還是很有用的。
Windows下調用程式
Process proc = Runtime . getRuntime () . exec ( " exefile " ) ;
Linux下調用程式就要改成下面的格式
Process proc = Runtime . getRuntime () . exec ( " ./exefile " ) ;
Windows下調用系統指令
String [] cmd = { " cmd " , " /C " , " copy exe1 exe2 " } ;
Process proc = Runtime . getRuntime () . exec ( cmd ) ;
Linux下調用系統指令就要改成下面的格式
String [] cmd = { " /bin/sh " , " -c " , " ln -s exe1 exe2 " } ;
Process proc = Runtime . getRuntime () . exec ( cmd ) ;
Windows下調用系統指令并彈出指令行視窗
String [] cmd = { " cmd " , " /C " , " start copy exe1 exe2 " } ;
Process proc = Runtime . getRuntime () . exec ( cmd ) ;
Linux下調用系統指令并彈出終端視窗就要改成下面的格式
String [] cmd = { " /bin/sh " , " -c " , " xterm -e ln -s exe1 exe2 " } ;
Process proc = Runtime . getRuntime () . exec ( cmd ) ;
還有要設定調用程式的工作目錄就要
Process proc = Runtime . getRuntime () . exec ( " exeflie " , null , new File ( " workpath " )) ;