更新時(shí)間:2022-08-01 11:36:12 來源:動(dòng)力節(jié)點(diǎn) 瀏覽6993次
動(dòng)力節(jié)點(diǎn)小編來告訴大家Java執(zhí)行shell腳本的方法。如果你有一個(gè) shell 腳本,比如 test.sh,那么你可以使用 RunTime 類或 ProcessBuilder 從 Java 程序運(yùn)行它(注意 ProcessBuilder 是在 Java 5 中添加的)。
使用 Runtime.getRunTime().exec 執(zhí)行 shell 腳本
導(dǎo)入 java.io.BufferedReader;
導(dǎo)入 java.io.IOException;
導(dǎo)入 java.io.InputStreamReader;
公共類 RunningSS {
公共靜態(tài)無效主要(字符串[]參數(shù)){
進(jìn)程 p;
嘗試 {
String[] cmd = { "sh", "/home/adb/Documents/test.sh"};
p = Runtime.getRuntime().exec(cmd);
p.waitFor();
BufferedReader reader=new BufferedReader(new InputStreamReader(
p.getInputStream()));
字符串線;
while((line = reader.readLine()) != null) {
System.out.println(line);
}
} 捕捉(IOException e){
// TODO 自動(dòng)生成的 catch 塊
e.printStackTrace();
} 捕捉(InterruptedException e){
// TODO 自動(dòng)生成的 catch 塊
e.printStackTrace();
}
}
}
使用給定的 shell 腳本執(zhí)行此 Java 程序后,如果您在 Java 程序所在的位置進(jìn)行驗(yàn)證,您將看到在該目錄中創(chuàng)建了一個(gè)目錄 test 和一個(gè)文件 SAMPLE。
Runtime.getRuntime().exec方法用于運(yùn)行命令。
public static Runtime getRuntime() - 返回與當(dāng)前 Java 應(yīng)用程序關(guān)聯(lián)的運(yùn)行時(shí)對(duì)象。
public Process exec(String command) throws IOException - 在單獨(dú)的進(jìn)程中執(zhí)行指定的字符串命令。
與命令一起使用的cmd /c具有以下解釋 -
cmd - 啟動(dòng)一個(gè)新的命令外殼
/c - 執(zhí)行給定的命令并終止
該命令的執(zhí)行返回類 Process 的實(shí)例。使用 Process 類的getInputStream()方法,可以通過讀取流來打印執(zhí)行命令的輸出。
如果您必須使用 ProcessBuilder 運(yùn)行與上述相同的命令,這是一種更清晰的方法,您可以創(chuàng)建一個(gè)包含命令和所需參數(shù)的列表,然后將其作為命令傳遞給 ProcessBuilder 實(shí)例。
導(dǎo)入 java.io.BufferedReader;爪哇_ 伊奧。緩沖讀取器;
導(dǎo)入 java.io.IOException;導(dǎo)入java 。伊奧。異常;
導(dǎo)入 java.io.InputStreamReader;導(dǎo)入java 。伊奧。輸入流讀取器;
導(dǎo)入 java.util.ArrayList;導(dǎo)入java 。實(shí)用程序。數(shù)組列表;
導(dǎo)入 java.util.List;導(dǎo)入java 。實(shí)用程序。列表;
公共類 RunningSS {公共類RunningSS {
公共靜態(tài)無效主要(字符串[]參數(shù)){公共靜態(tài)無效主要(字符串[]參數(shù)){
進(jìn)程 p;進(jìn)程p ;
嘗試 { 試試{
List<String> cmdList = new ArrayList<String>();列表<字符串> cmdList = new ArrayList <字符串>();
// 將命令和參數(shù)添加到列表中// 將命令和參數(shù)添加到列表中
cmdList.add("sh");. 添加(“sh” );
cmdList.add("/home/adb/Documents/test.sh");. 添加(“/home/adb/Documents/test.sh” );
ProcessBuilder pb = new ProcessBuilder(cmdList);ProcessBuilder pb = new ProcessBuilder ( cmdList );
p = pb.start();=鉛。開始();
p.waitFor();. 等待();
BufferedReader reader=new BufferedReader(new InputStreamReader(BufferedReader reader = new BufferedReader ( new InputStreamReader (
p.getInputStream()));. 獲取輸入流()));
字符串線;字符串線;
while((line = reader.readLine()) != null) {while (( line = reader . readLine ()) != null ) {
System.out.println(line);系統(tǒng)。出來。println (行);
}}
} 捕捉(IOException e){}捕捉(IOException e ){
// TODO 自動(dòng)生成的 catch 塊// TODO 自動(dòng)生成的 catch 塊
e.printStackTrace();. 打印堆棧跟蹤();
} 捕捉(InterruptedException e){}捕捉(InterruptedException e ){
// TODO 自動(dòng)生成的 catch 塊// TODO 自動(dòng)生成的 catch 塊
e.printStackTrace();. 打印堆棧跟蹤();
}}
}}
}}
以上就是關(guān)于“Java執(zhí)行shell腳本的方法”,如果大家對(duì)此比較感興趣,可以關(guān)注一下動(dòng)力節(jié)點(diǎn)的Java在線學(xué)習(xí),里面的課程內(nèi)容細(xì)致全面,很適合沒有基礎(chǔ)的小伙伴學(xué)習(xí),希望對(duì)大家能夠有所幫助。
相關(guān)閱讀