scala APACHE Commons解压方法?

oipij1gg  于 2022-11-09  发布在  Scala
关注(0)|答案(2)|浏览(105)

我最近发现了https://commons.apache.org/proper/commons-compress/zip.html,这是一个ApacheCommons压缩库。
然而,没有直接的方法可以简单地将给定文件解压缩到特定目录。
有没有一种规范/简单的方法来做到这一点?

qni6mghb

qni6mghb1#

使用IOUtils的一些示例代码:

public static void unzip(Path path, Charset charset) throws IOException{
    String fileBaseName = FilenameUtils.getBaseName(path.getFileName().toString());
    Path destFolderPath = Paths.get(path.getParent().toString(), fileBaseName);

    try (ZipFile zipFile = new ZipFile(path.toFile(), ZipFile.OPEN_READ, charset)){
        Enumeration<? extends ZipEntry> entries = zipFile.entries();
        while (entries.hasMoreElements()) {
            ZipEntry entry = entries.nextElement();
            Path entryPath = destFolderPath.resolve(entry.getName());
            if (entryPath.normalize().startsWith(destFolderPath.normalize())){
                if (entry.isDirectory()) {
                    Files.createDirectories(entryPath);
                } else {
                    Files.createDirectories(entryPath.getParent());
                    try (InputStream in = zipFile.getInputStream(entry)){
                        try (OutputStream out = new FileOutputStream(entryPath.toFile())){
                            IOUtils.copy(in, out);                          
                        }
                    }
                }
            }
        }
    }
}
imzjd6km

imzjd6km2#

我不知道有哪个包裹能做到这一点。您需要编写一些代码。这并不难。我还没有使用过那个包,但在JDK中很容易做到。看看JDK中的ZipInputStream。使用FileInputStream打开文件。从FileInputStream创建一个ZipInputStream,您可以使用getNextEntry读取条目。这真的很容易,但需要一些代码。

相关问题