使用 ant 解压缩任务省略基目录



我有一个以下格式的zip:

/a
  /b
    c.txt

我想将其解压缩到目标文件夹,不包括最顶层目录 ( /a

这意味着如果我的目录是workspace它的内容将是:

/b
  c.txt

限制:我事先不"知道"最上面的目录名称

此外,最上面的目录不等于 zip 文件名减去"zip"

ant.unzip(src : src, dest: target) {
    cutdirsmapper (dirs:1)
}

下面是 Utility 类,它有一个方法,可用于压缩目录,并带有排除 Directries 的选项。(我在我的一个项目中使用它并且对我来说工作得很好。

class ZipUtil {
    static Logger log = Logger.getLogger(ZipUtil.class)
    static Boolean zipDirectory(String srcDirPath, OutputStream targetOutputStream, List excludeDirs) {
        Boolean ret = true
        File rootFile = new File(srcDirPath)
        byte[] buf = new byte[1024]
        try {
            ZipOutputStream out = new ZipOutputStream(targetOutputStream)
            File rec = new File(srcDirPath)
            rec.eachFileRecurse {File file ->
                if (file.isFile()) {
                    FileInputStream input = new FileInputStream(file)
                    // Store relative file path in zip file
                    String tmp = file.absolutePath.substring(rootFile.absolutePath.size() + 1)
                    // Add ZIP entry to output stream.
                    out.putNextEntry(new ZipEntry(tmp))
                    // Transfer bytes from the file to the ZIP file
                    int len
                    while ((len = input.read(buf)) > 0) {
                        out.write(buf, 0, len);
                    }
                    // Complete the entry
                    out.closeEntry()
                    input.close()
                }
            }
            out.close()
        } catch (Exception e) {
            log.error "Encountered error when zipping file $srcDirPath, error is ${e.message}"
            ret = false
        }
        return ret
    }
}

下面给出了使用该类的示例:它排除了当前目录。

zipFile = new File(zipFilePath)
FileOutputStream fileOutputStream = new FileOutputStream(zipFile)
ZipUtil.zipDirectory(tempFolder.absolutePath, fileOutputStream, ['.'])

希望有帮助!!

谢谢

相关内容

  • 没有找到相关文章

最新更新