如何从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");
答
问题是,你没有考虑到过程的标准输出/错误(正如在评论中@Yazan所提到的)。您需要从创建的进程中获取.get{Output,Error}Stream()
并从中读取(即使只是放弃它)。
然而,真正的问题是,您使用外部shell脚本来完成Java本身完全可行的事情。请参阅this page,其中举例说明如何完全使用Java代码提取zip文件;要删除文件,请使用Files.delete()
。
您使用Java 7+,对吧?如果是,为什么不使用FileSystem API而不是依赖外部脚本? – fge 2014-10-16 11:31:08
从进程中读取stdStream&ErrorStream。 – Yazan 2014-10-16 11:36:06
抛出的任何异常? – 2014-10-16 11:42:21