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

时间:2014-10-16 11:29:07

标签: java shell

我编写了一个提取文件的shell脚本文件,请参阅下文。

文件名: unzip.sh

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

这个shell脚本在putty上执行成功,

 $> ./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 个答案:

答案 0 :(得分:0)

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

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