Java8 Files和Path 解压zip文件(SpringBoot解压zip文件)

Java8 Files 解压zip文件


vue.zip压缩包内文件结构
Java8 Files和Path 解压zip文件(SpringBoot解压zip文件)_第1张图片
不需要更多解释,全在注释里了。

    /**
     * 解压Zip
     * 代码比较简单,运行后通过打印日志能有更深的理解
     */
    public void unZip() {
        try {
            // 此代码是在SpringBoot项目中摘过来的。sourcePath请根据实际情况设置
            Path sourcePath = Paths.get("static", "dist", "vue.zip");
            FileSystem fs = FileSystems.newFileSystem(sourcePath, (ClassLoader) null);
            // 重点:fs.getPath("/")  具体为什么不清楚,如果有知道的可以底下评论
            Files.walkFileTree(fs.getPath("/"), new SimpleFileVisitor<Path>() {
                // 此方法返回Zip包内全部文件
                public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
                    System.out.println(">>> " + file.toString());  // 日志:>>> /vue/css/app.css
                    if (file.startsWith("/__MACOSX")) {  // 由于我使用Mac生成的Zip包,解压的时候选择过滤掉。
                        System.out.println("过滤:/__MACOSX");
                        return FileVisitResult.CONTINUE;
                    }
                    // 解压到的目录是:static/dist 文件夹下(sourcePath.getParent().toString()="static/dist")
                    // 需求是解压到当前目录下,所以我们要把vue文件夹截取掉(file.subpath(1, file.getNameCount()).toString()="css/app.css")
                    // 如果你是直接压缩的多个文件外层无vue文件夹,不需要截取代码
                    Path target = Paths.get(sourcePath.getParent().toString(), file.subpath(1, file.getNameCount()).toString());
                    System.out.println("目标:" + target.toString());  // 日志:目标:static/dist/css/app.css
                    if (Files.notExists(target.getParent())) {  // 判断是否有css文件夹,如果没有创建文件夹
                        Files.createDirectories(target.getParent());
                    }
                    Files.copy(file, target);  // 最后写入文件
                    return FileVisitResult.CONTINUE;
                }
            });
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

点赞哦

你可能感兴趣的:(Java)