我正在尝试使用注释运行此代码失败:
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);
}
...谢谢
答案 0 :(得分:1)
*.gz
glob不是由gunzip命令处理的,而是shell。例如,shell会将gunzip *.gz
翻译为gunzip a.gz b.gz
。现在,当您通过java执行时,您必须调用bash为您执行globbing,或者在java中展开glob,因为gzip不知道如何处理glob。
Java 7具有new libraries,这使得扩展的glob模式更容易。