如何从Java类执行shell脚本程序文件

问题描述:

我写了一个提取文件的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

问题是,你没有考虑到过程的标准输出/错误(正如在评论中@Yazan所提到的)。您需要从创建的进程中获取.get{Output,Error}Stream()并从中读取(即使只是放弃它)。

然而,真正的问题是,您使用外部shell脚本来完成Java本身完全可行的事情。请参阅this page,其中举例说明如何完全使用Java代码提取zip文件;要删除文件,请使用Files.delete()