1. 程式人生 > >Java調用Linux命令(cd的處理)

Java調用Linux命令(cd的處理)

time wait adl 連接 ktr lose exce 簡單 res

一、Java調用Linux系統的命令非常簡單

這是一個非常常用的調用方法示例:

 1     public String executeLinuxCmd(String cmd) {
 2         System.out.println("got cmd job : " + cmd);
 3         Runtime run = Runtime.getRuntime();
 4         try {
 5             Process process = run.exec(cmd);
 6             InputStream in = process.getInputStream();
7 BufferedReader bs = new BufferedReader(new InputStreamReader(in)); 8 // System.out.println("[check] now size \n"+bs.readLine()); 9 String result = null; 10 while (in.read() != -1) { 11 result = bs.readLine(); 12 System.out
.println("job result [" + result + "]"); 13 } 14 in.close(); 15 // process.waitFor(); 16 process.destroy(); 17 return result; 18 } catch (IOException e) { 19 e.printStackTrace(); 20 } 21 return null; 22 }

二、含有cd操作的方法示例

1. 問題背景

1.1 java程序運行在/home/lings目錄下;

1.2 希望刪除/home/test目錄下的文件proxy.log;

1.3 調用上面的接口兩次?

executeLinuxCmd("cd /home/test");
executeLinuxCmd("rm -fr /home/proxy.log");

是不行的!

1.4 這個接口的調用是單次事務型的,就是每次調用都是獨立的事務或者說操作,沒有關聯的。

那這種“復雜”一點的操作流程怎麽辦呢?

1.5 方法a: 可以寫一個獨立的腳本,然後一次運行腳本,這樣多復雜的邏輯都沒問題。

1.6 方法b: 可以啟動一個shell長連接,保持連接,發送多條命令,最後釋放連接。

示例邏輯代碼:

 1 public void executeNewFlow() {
 2         Runtime run = Runtime.getRuntime();
 3         File wd = new File("/bin");
 4         System.out.println(wd);
 5         Process proc = null;
 6         try {
 7             proc = run.exec("/bin/bash", null, wd);
 8         } catch (IOException e) {
 9             e.printStackTrace();
10         }
11         if (proc != null) {
12             BufferedReader in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
13             PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(proc.getOutputStream())), true);
14             out.println("cd /home/test");
15             out.println("pwd");
16             out.println("rm -fr /home/proxy.log");
17             out.println("exit");
18             try {
19                 String line;
20                 while ((line = in.readLine()) != null) {
21                     System.out.println(line);
22                 }
23                 proc.waitFor();
24                 in.close();
25                 out.close();
26                 proc.destroy();
27             } catch (Exception e) {
28                 e.printStackTrace();
29             }
30         }
31     }

Java調用Linux命令(cd的處理)