Java8 Files 解压zip文件
vue.zip压缩包内文件结构
不需要更多解释,全在注释里了。
/**
* 解压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();
}
}
点赞哦👍