- 相關(guān)推薦
java程序中如何調用linux命令
作為一個(gè)Java開(kāi)發(fā)人員,有些常用的Linux命令必須掌握。即時(shí)平時(shí)開(kāi)發(fā)過(guò)程中不使用Linux(Unix)或者mac系統,也需要熟練掌握Linux命令。因為很多服務(wù)器上都是Linux系統。所以,要和服務(wù)器機器交互,就要通過(guò)shell命令。本文為大家分享的就是java程序中怎么調用linux命令。
Java調用shell
Java語(yǔ)言以其跨平臺性和簡(jiǎn)易性而著(zhù)稱(chēng),在Java里面的lang包里(java.lang.Runtime)提供了一個(gè)允許Java程序與該程序所運行的環(huán)境交互的接口,這就是Runtime類(lèi),在Runtime類(lèi)里提供了獲取當前運行環(huán)境的接口。
其中的exec函數返回一個(gè)執行shell命令的子進(jìn)程。exec函數的具體實(shí)現形式有以下幾種:
public Process exec(String command) throws IOException
public Process exec(String command,String[] envp) throws
IOException
public Process exec(String command,String[] envp,File dir) throws
IOException
public Process exec(String[] cmdarray) throws IOException
public Process exec(String[] cmdarray, String[] envp) throws
IOException
public Process exec(String[] cmdarray, String[] envp,File dir)
throws IOException
我們在這里主要用到的是第一個(gè)和第四個(gè)函數,具體方法很簡(jiǎn)單,就是在exec函數中傳遞一個(gè)代表命令的字符串。exec函數返回的是一個(gè)Process類(lèi)型的類(lèi)的實(shí)例。Process類(lèi)主要用來(lái)控制進(jìn)程,獲取進(jìn)程信息等作用。(具體信息及其用法請參看Java doc)。
1)執行簡(jiǎn)單的命令的方法:
代碼如下:
try
String commands = "ls -l";
Process process = Runtime.getRuntime().exec (commands);
// for showing the info on screen
InputStreamReader ir=new
InputStreamReader(process.getInputStream());
BufferedReader input = new BufferedReader (ir);
String line;
while ((line = input.readLine ()) != null){
System.out.println(line);
}//end try
catch (java.io.IOException e){
System.err.println ("IOException " + e.getMessage());
} 上面的代碼首先是聲明了一個(gè)代表命令的字符串commands,它代表了ls -l
這個(gè)命令。之后我們用Runtime.getRuntime().exec(commands)來(lái)生成一個(gè)子進(jìn)程來(lái)執行這個(gè)命令,如果這句話(huà)運行成功,則命令 ls -l 運行成功(由于沒(méi)有讓它顯示,不會(huì )顯示ls -l
的結果)。后面的流操作則是獲取進(jìn)程的流信息,并把它們一行行輸出到屏幕。2)執行帶有參數的命令(尤其是參數需要用引號的)時(shí)則需要用String的數組來(lái)表示整個(gè)命令,而且要用轉義符把引號的特殊含義去除,例如我們要執行find / -name "*mysql*" -print 時(shí),用如下代碼
try
String[] commands = new
String[]{"find",".","-name","*mysql*","-print"};
Process process = Runtime.getRuntime().exec (commands);
InputStreamReader ir=new
InputStreamReader(process.getInputStream());
BufferedReader input = new BufferedReader (ir);
String line;
while ((line = input.readLine ()) != null){
System.out.println(line);
}//end try
catch (java.io.IOException e){
System.err.println ("IOException " + e.getMessage());
Java 可以通過(guò) Runtime 調用Linux命令,形式如下:
Runtime.getRuntime().exec(command)
但是這樣執行時(shí)沒(méi)有任何輸出,因為調用 Runtime.exec 方法將產(chǎn)生一個(gè)本地的進(jìn)程,并返回一個(gè)Process子類(lèi)的實(shí)例(注意:Runtime.getRuntime().exec(command)返回的是一個(gè)Process類(lèi)的實(shí)例)該實(shí)例可用于控制進(jìn)程或取得進(jìn)程的相關(guān)信息。
由于調用 Runtime.exec 方法所創(chuàng )建的子進(jìn)程沒(méi)有自己的終端或控制臺,因此該子進(jìn)程的標準IO(如stdin,stdou,stderr)都通過(guò) Process.getOutputStream(),Process.getInputStream(), Process.getErrorStream() 方法重定向給它的父進(jìn)程了。
用戶(hù)需要用這些stream來(lái)向子進(jìn)程輸入數據或獲取子進(jìn)程的輸出,下面的代碼可以取到 linux 命令的執行結果:
try {
String[] cmd = new String[]{”/bin/sh”, “-c”, ” ls “};
Process ps = Runtime.getRuntime().exec(cmd);
BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream()));
StringBuffer sb = new StringBuffer();
String line;
while ((line = br.readLine()) != null) {
sb.append(line).append(”\n”);
}
String result = sb.toString();
System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
}
【java程序中如何調用linux命令】相關(guān)文章:
java調用cmd命令01-29
java開(kāi)發(fā)必會(huì )的Linux命令03-24
Linux中的more命令解讀202405-06
linux命令中su和sudo區別03-24
如何編譯java程序03-05
linux常用基本命令(文件處理命令)11-29
Linux中常用操作命令03-06
Linux硬件信息命令大全03-24
Linux日常使用命令大全03-27