package com.buptnu.util;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;public class ZipUtil {public static void zipDirectory(String zipPath, List<String> filePathList) {ZipOutputStream zipOut = null;try {FileOutputStream fileOut = new FileOutputStream(zipPath);zipOut = new ZipOutputStream(fileOut);for (String filePath : filePathList) {File file = new File(filePath);if (file.exists()) {ZipUtil.zipDirectory(zipOut, filePath, "");}}} catch (Exception e) {e.printStackTrace();} finally {if (zipOut != null) {try {zipOut.close();} catch (IOException e) {}}}}public static void zipDirectory(ZipOutputStream zos, String filePath, String parentDirectory) throws IOException {File file = new File(filePath);String fileName = ("".equals(parentDirectory) ? "" : parentDirectory + "/") + file.getName();if (file.isDirectory()) {zos.putNextEntry(new ZipEntry(fileName + "/"));zos.closeEntry();for (File fileItem : file.listFiles()) {zipDirectory(zos, fileItem.getAbsolutePath(), fileName);}} else if (file.isFile()) {zos.putNextEntry(new ZipEntry(fileName));FileInputStream fis = null;try {fis = new FileInputStream(file);byte[] buffer = new byte[1024];int length;while ((length = fis.read(buffer)) >= 0) {zos.write(buffer, 0, length);}} finally {if (fis != null) {fis.close();}}zos.closeEntry();}}public static void unzip(String zipFilePath, String destDirectory) throws IOException {Path destDirPath = Paths.get(destDirectory);if (!Files.exists(destDirPath)) {Files.createDirectories(destDirPath);}ZipFile zipFile = null;try {zipFile = new ZipFile(zipFilePath);Enumeration<? extends ZipEntry> entries = zipFile.entries();while (entries.hasMoreElements()) {ZipEntry entry = entries.nextElement();Path filePath = destDirPath.resolve(entry.getName()).normalize();if (entry.isDirectory()) {Files.createDirectories(filePath);} else {Files.createDirectories(filePath.getParent());InputStream is = null;OutputStream os = null;try {is = zipFile.getInputStream(entry);os = Files.newOutputStream(filePath, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING);byte[] buffer = new byte[1024];int len;while ((len = is.read(buffer)) > 0) {os.write(buffer, 0, len);}} finally {if (is != null) {is.close();}if (os != null) {os.close();}}}}} finally {if (zipFile != null) {zipFile.close();}}}public static void main(String[] args) throws IOException {String zipPath = "D:\\zip\\压缩包.zip";List<String> directoryList = new ArrayList<String>();directoryList.add("D:\\邮件附件");directoryList.add("D:\\问题处理记录");directoryList.add("D:\\开发工具与环境配置\\开发环境配置.docx");zipDirectory(zipPath, directoryList);unzip(zipPath, "D:\\\\zip");}}