gpt4 book ai didi

java - 如何在 Java 中解压缩目录中的所有 Zip 文件夹?

转载 作者:可可西里 更新时间:2023-11-01 10:33:06 27 4
gpt4 key购买 nike

我想编写一个程序,它将获取文件夹中存在的所有 Zip 文件并将其解压缩到目标文件夹中。我能够编写一个程序,我可以在其中解压缩一个 zip 文件,但我想解压缩该文件夹中存在的所有 zip 文件,我该怎么做?

最佳答案

它不漂亮,但你明白了。

  1. 使用NIO来自 Java 7 的文件 api 流过滤出 zip 文件的目录
  2. 使用ZIP用于访问存档中每个 ZipEntry 的 API
  3. 使用NIO api将文件写入指定目录

    public class Unzipper {

    public static void main(String [] args){
    Unzipper unzipper = new Unzipper();
    unzipper.unzipZipsInDirTo(Paths.get("D:/"), Paths.get("D:/unzipped"));
    }

    public void unzipZipsInDirTo(Path searchDir, Path unzipTo ){

    final PathMatcher matcher = searchDir.getFileSystem().getPathMatcher("glob:**/*.zip");
    try (final Stream<Path> stream = Files.list(searchDir)) {
    stream.filter(matcher::matches)
    .forEach(zipFile -> unzip(zipFile,unzipTo));
    }catch (IOException e){
    //handle your exception
    }
    }

    public void unzip(Path zipFile, Path outputPath){
    try (ZipInputStream zis = new ZipInputStream(Files.newInputStream(zipFile))) {

    ZipEntry entry = zis.getNextEntry();

    while (entry != null) {

    Path newFilePath = outputPath.resolve(entry.getName());
    if (entry.isDirectory()) {
    Files.createDirectories(newFilePath);
    } else {
    if(!Files.exists(newFilePath.getParent())) {
    Files.createDirectories(newFilePath.getParent());
    }
    try (OutputStream bos = Files.newOutputStream(outputPath.resolve(newFilePath))) {
    byte[] buffer = new byte[Math.toIntExact(entry.getSize())];

    int location;

    while ((location = zis.read(buffer)) != -1) {
    bos.write(buffer, 0, location);
    }
    }
    }
    entry = zis.getNextEntry();
    }
    }catch(IOException e){
    throw new RuntimeException(e);
    //handle your exception
    }
    }
    }

关于java - 如何在 Java 中解压缩目录中的所有 Zip 文件夹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42839569/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com