1

我正在尝试运行此代码,但由于注释失败:

gzip:/home/idob/workspace/DimesScheduler/*.gz:没有这样的文件或目录

编码:

ProcessBuilder gunzipPB = new ProcessBuilder("gunzip", System.getProperty("user.dir") + File.separator + "*");
gunzipPB.inheritIO();
int gunzipProcessExitValue;

try {
        gunzipProcessExitValue = gunzipPB.start().waitFor();
    } catch (InterruptedException | IOException e) {
        throw new RuntimeException("Service " + this.getClass().getSimpleName() + " could not finish creating WHOIS AS Prefix Table", e);
    }

logger.info("Finished unzipping radb and ripe files. Process exit value : {}", gunzipProcessExitValue);

退出值为 1。

终端中的相同命令可以正常工作(文件存在)。

可能是什么问题?

谢谢。

我愿意

编辑:

尝试使用 DirectoryStrem 后,我收到此异常: java.nio.file.NoSuchFileException: /home/idob/workspace/DimesScheduler/*.gz

知道可能是什么问题吗?文件确实存在。

完整代码:

ProcessBuilder radbDownloadPB = new ProcessBuilder("wget", "-q", "ftp://ftp.radb.net    /radb/dbase/*.db.gz");
ProcessBuilder ripeDownloadPB = new ProcessBuilder("wget", "-q", "ftp://ftp.ripe.net/ripe/dbase/split/ripe.db.route.gz"); 

    radbDownloadPB.inheritIO();
    ripeDownloadPB.inheritIO(); 

    try {

        int radbProcessExitValue = radbDownloadPB.start().waitFor();
        logger.info("Finished downloading radb DB files. Process exit value : {}", radbProcessExitValue);

        int ripeProcessExitValue = ripeDownloadPB.start().waitFor();
        logger.info("Finished downloading ripe DB file. Process exit value : {}", ripeProcessExitValue);

        // Unzipping the db files - need to process each file separately since java can't do the globing of '*'  
        try (DirectoryStream<Path> zippedFilesStream = Files.newDirectoryStream(Paths.get(System.getProperty("user.dir"), "*.gz"))){
            for (Path zippedFilePath : zippedFilesStream) {
                ProcessBuilder gunzipPB = new ProcessBuilder("gunzip", zippedFilePath.toString());
                gunzipPB.inheritIO();
                int gunzipProcessExitValue = gunzipPB.start().waitFor();
                logger.debug("Finished unzipping file {}. Process exit value : {}", zippedFilePath, gunzipProcessExitValue);
            }
        }

        logger.info("Finished unzipping ripe and radb DB file");

    } catch (InterruptedException | IOException e) {
        throw new RuntimeException("Service " + this.getClass().getSimpleName() + " could not finish creating WHOIS AS Prefix Table", e);
    }

谢谢...

4

1 回答 1

1

*.gz glob不是由 gunzip 命令处理的,而是由 shell 处理的。例如,shell 将转换gunzip *.gzgunzip a.gz b.gz. 现在,当您通过 java 执行时,您要么必须调用 bash 为您执行 glob,要么在 java 中扩展 glob,因为 gzip 不知道如何处理 glob。

Java 7 具有新的库,可以更轻松地扩展 glob 模式。

于 2013-05-05T13:56:24.610 回答