使用Apache Common Compress提取时排除根目录

时间:2019-02-13 06:24:35

标签: java apache-commons-compress

我正在使用Apache Common Compress库解压缩tar.gz文件。我的情况是tar文件中的文件层次结构就是这样。

  • 一个[根目录]
    • B [文件]
    • C [文件]

现在,将使用以下代码将这些文件提取到定义明确的路径:

try (TarArchiveInputStream fin = new TarArchiveInputStream(new GzipCompressorInputStream(new FileInputStream(inFolderPath)))){
            TarArchiveEntry entry;
            while ((entry = fin.getNextTarEntry()) != null) {
                if (entry.isDirectory()) {
                    continue;
                }
                File curfile = new File(outFolderPath, entry.getName());
                File parent = curfile.getParentFile();
                if (!parent.exists()) {
                    parent.mkdirs();
                }
                IOUtils.copy(fin, new FileOutputStream(curfile));
            }
        } catch (IOException e) {
            Debug.logError(e, module);
        }

文件夹A的名称会随时间变化,因为其名称后会附加一个日期值。我需要从其他一些代码访问B和C(始终使用相同的名称)文件。
有什么方法可以跳过A [根目录]并将B&C直接提取到所需位置。

当前,我已经编写了移动文件和删除根目录的代码:

File dir = new File(unzipDir);
        File rootDir = dir.listFiles()[0];
        File[] directoryListing = rootDir.listFiles();
        if (directoryListing != null) {
            for (File child : directoryListing) {
                child.renameTo(new File(unzipDir + "/" + child.getName()));
            }
        }
        rootDir.delete(); 

我必须写一些额外的代码来做。 Apache Common Compress库有什么办法做到这一点?

0 个答案:

没有答案