1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- package com.macro.mall.tiny.common.util;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.nio.charset.Charset;
- import java.nio.file.Files;
- import java.nio.file.Path;
- import java.nio.file.Paths;
- import java.nio.file.StandardOpenOption;
- import java.util.concurrent.ExecutionException;
- import java.util.zip.ZipEntry;
- import java.util.zip.ZipFile;
- import java.util.zip.ZipInputStream;
- public class ZipUtils {
- public static void main(String[] args) throws IOException, ExecutionException, InterruptedException {
- ZipUtils.unPacket(Paths.get("E:/WorkSpace/doc-manager-master/temp/四川.zip"), Paths.get("E:/WorkSpace/doc-manager-master/power"), "gbk");
- }
- /**
- * 解压文件并录入对应目录
- *
- * @param file 压缩文件
- * @param targetDir 解压文件输出的目录
- * @throws IOException
- */
- public static void unPacket(Path file, Path targetDir, String charset) throws IOException {
- if (!Files.exists(targetDir)) {
- Files.createDirectories(targetDir);
- }
- // 创建zip对象
- try (ZipFile zipFile = new ZipFile(file.toFile(), Charset.forName(charset))) {
- // 读取zip流
- try (ZipInputStream zipInputStream = new ZipInputStream(Files.newInputStream(file), Charset.forName(charset))) {
- ZipEntry zipEntry;
- // 遍历每一个zip项
- while ((zipEntry = zipInputStream.getNextEntry()) != null) {
- // 获取zip项目名称
- String entryName = zipEntry.getName();
- System.out.println(entryName);
- // 构建绝对路径
- Path entryFile = targetDir.resolve(entryName);
- if (zipEntry.isDirectory()) { // 文件夹
- if (!Files.isDirectory(entryFile)) {
- Files.createDirectories(entryFile);
- }
- } else { // 文件
- if (Files.exists(entryFile)) {
- continue;
- }
- // 读取zip项数据流
- try (InputStream zipEntryInputStream = zipFile.getInputStream(zipEntry)) {
- try (OutputStream fileOutputStream = Files.newOutputStream(entryFile, StandardOpenOption.CREATE_NEW)) {
- byte[] buffer = new byte[2048];
- int length;
- while ((length = zipEntryInputStream.read(buffer)) != -1) {
- fileOutputStream.write(buffer, 0, length);
- }
- }
- }
- }
- }
- }
- }
- }
- }
|