2014-10-16 104 views
0

我寫了一個提取文件的shell腳本文件,請參閱下文。如何從Java類執行shell腳本程序文件

文件名: unzip.sh

#/bin/sh 
cd /home/zip; 
UNZIPDIR=/home/unzip/; 
for i in *.zip; do 
    unzip "$i" -d "$UNZIPDIR" 
    rm "$i"; 
done; 

這個shell腳本執行sucessfuly上膩子,

$> ./zip.sh 

因爲我想從我的java類執行這個腳本的時候,我嘗試了好幾種調用/執行shell腳本文件的方法,但它不執行。請參閱下面的java代碼。

//First try 
      File executorDirectory = new File("/home/zip"); 
      ProcessBuilder processBuilder = new ProcessBuilder("./unzip.sh"); 
      processBuilder.directory(executorDirectory); 
      Process p = processBuilder.start(); 
      p.waitFor() 

      //Second try 
      Process p = Runtime.getRuntime().exec("/home/zip/unzip.sh"); 
+1

您使用Java 7+,對吧?如果是,爲什麼不使用FileSystem API而不是依賴外部腳本? – fge 2014-10-16 11:31:08

+1

從進程中讀取stdStream&ErrorStream。 – Yazan 2014-10-16 11:36:06

+0

拋出的任何異常? – 2014-10-16 11:42:21

回答

0

問題是,你沒有考慮到過程的標準輸出/錯誤(正如在評論中@Yazan所提到的)。您需要從創建的進程中獲取.get{Output,Error}Stream()並從中讀取(即使只是放棄它)。

然而,真正的問題是,您使用外部shell腳本來完成Java本身完全可行的事情。請參閱this page,其中舉例說明如何完全使用Java代碼提取zip文件;要刪除文件,請使用Files.delete()