天天看點

java調用linux 程式_如何在java程式中調用linux指令或者shell腳本

轉自:http://blog.sina.com.cn/s/blog_6433391301019bpn.html

在java程式中如何調用linux的指令?如何調用shell腳本呢?

這裡不得不提到java的process類了。

process這個類是一個抽象類,封裝了一個程序(你在調用linux的指令或者shell腳本就是為了執行一個在linux下執行的程式,是以應該使用process類)。

process類提供了執行從程序輸入,執行輸出到程序,等待程序完成,檢查程序的推出狀态,以及shut down掉程序。

至于詳細的process類的介紹放在以後介紹。

另外還要注意一個類:Runtime類,Runtime類是一個與JVM運作時環境有關的類,這個類是Singleton的。

這裡用到的Runtime.getRuntime()方法是取得目前JVM的運作環境,也是java中唯一可以得到運作環境的方法。(另外,Runtime的大部分方法都是執行個體方法,也就是說每次運作調用的時候都需要調用到getRuntime方法)

下面說說Runtime的exec()方法,這裡要注意的有一點,就是public Process exec(String [] cmdArray, String [] envp);這個方法中cmdArray是一個執行的指令和參數的字元串數組,數組的第一個元素是要執行的指令往後依次都是指令的參數,envp感覺應該和C中的execve中的環境變量是一樣的,envp中使用的是name=value的方式。

下面說一下,如何使用process來調用shell腳本

例如,我需要在linux下實行linux指令:sh test.sh,下面就是執行test.sh指令的方法:

這個var參數就是日期這個201102包的名字。

String shpath="/test/test.sh";   //程式路徑

Process process =null;

String command1 = “chmod 777 ” + shpath;

process = Runtime.getRuntime().exec(command1);

process.waitFor();

String var="201102";               //參數

String command2 = “/bin/sh ” + shpath + ” ” + var;

Runtime.getRuntime().exec(command2).waitFor();

注意:

1

我為什麼要使用 chmod 777指令呢?在有的機器上面,可能沒有設定權限問題。這是你在linux下面執行shell腳本需要注意的問題。沒有的話,就需要添權重限,就用chmod 777,否則在執行到Runtime.getRuntime().exec的時侯會出現Permission denied錯誤。

2

waitFor()這個也是必不可缺的,如果你需要執行多行指令的話,把waitFor()這個加上。