文件解压缩(zip)
1.导入jar
<dependency> <groupId>net.lingala.zip4j</groupId> <artifactId>zip4j</artifactId> <version>1.3.2</version> </dependency>
2.工具类
/** * 压缩指定路径的文件 * @param srcFilePath 待压缩文件路径 * @param zipPathFileName zip文件全路径名 * @param password 加密密码 * @return */ public static boolean zipFile(String srcFilePath, String zipPathFileName, String zipName, String password) { try { // 生成的压缩文件 ZipFile zipFile = new ZipFile(zipPathFileName + "/" + zipName + ".zip"); getZipParameters(password); // 要打包的文件夹 File currentFile = new File(srcFilePath); File[] fs = currentFile.listFiles(); // 遍历源文件夹下所有的文件、文件夹 for (File f : fs) { ZipParameters parameters = getZipParameters(password); if (f.isDirectory()) { zipFile.addFolder(f.getPath(), parameters); } else { if (f.getName().endsWith(".zip")) { zipFile.addFile(f, parameters); } } } return true; } catch (ZipException e) { e.printStackTrace(); System.out.println("压缩文件【" + srcFilePath + "】到路径【" + zipPathFileName + "】失败:\n" + e.getMessage()); return false; } } /** * 文件夹下全部文件根据目录递归打包 * @param srcFilePath * @param password * @return */ public static boolean zipFileAll(String srcFilePath, String zipPathFileName, String zipName, String password) { try { File currentFile = new File(srcFilePath); File[] fs = currentFile.listFiles(); // 遍历源文件夹下所有的文件 生成压缩包 for (File f : fs) { ZipFile zipFile = new ZipFile(srcFilePath + "/" + f.getName() + ".zip"); ZipParameters parameters = getZipParameters(password); zipFile.addFile(f, parameters); } zipFile(srcFilePath, zipPathFileName, zipName, password); return true; } catch (ZipException e) { e.printStackTrace(); System.out.println("压缩文件【" + srcFilePath + "】到路径【" + srcFilePath + "】失败:\n" + e.getMessage()); return false; } } /**
* zip文件参数配置(密码采用AES加密)
*/ private static ZipParameters getZipParameters(String password) { ZipParameters parameters = new ZipParameters(); parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE); parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL); if (!StringUtil.isEmpty(password)) { parameters.setEncryptFiles(true); parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES); parameters.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256); parameters.setPassword(password); } return parameters; } /** * @param zipFileFullName zip文件所在的路径名 * @param filePath 解压到的路径 * @param password 需要解压的密码 * @return */ public static boolean unZipFile(String zipFileFullName, String filePath, String password) { try { ZipFile zipFile = new ZipFile(zipFileFullName); // 如果解压需要密码 if (StringUtil.isNotEmpty(password) && zipFile.isEncrypted()) { zipFile.setPassword(password); } zipFile.extractAll(filePath); return true; } catch (ZipException e) { e.printStackTrace(); System.out.println("解压文件【" + zipFileFullName + "】到路径【" + filePath + "】失败:\n" + e.getMessage()); return false; } } /** * 解压缩 * @param file zip文件 * @param filePath 待解压路径 * @param password 文件密码 * @return */ public static boolean unZipFile(File file, String filePath, String password) { try { ZipFile zipFile = new ZipFile(file); if (zipFile.isValidZipFile()) { // 如果解压需要密码 if (StringUtil.isNotEmpty(password) && zipFile.isEncrypted()) { zipFile.setPassword(password); } zipFile.extractAll(filePath); if (StringUtils.isNotEmpty(fileName)) { FileUtils.deleteFiles(filePath, fileName); } if (FileUtils.hasfile(filePath)) { File[] fileAll = FileUtils.getFileAll(filePath); if (fileAll != null) { for (File file1 : fileAll) { if (file1.getName().endsWith(".zip")) { fileName = file1.getName(); unZipFile(file1, filePath, password); } else { fileName = ""; } } } } return true; } return false; } catch (ZipException e) { e.printStackTrace(); System.out.println("解压文件【" + file + "】到路径【" + filePath + "】失败:\n" + e.getMessage()); return false; } } /** * 添加文件到压缩文件中 * @param zipFullFileName zip文件所在路径及全名 * @param fullFileNameList 待添加的文件全路径集合 * @param rootFolderInZip 在压缩文件里的文件夹名 * @return */ public static boolean addFilesToZip(String zipFullFileName, List<String> fullFileNameList, String rootFolderInZip) { try { ZipFile zipFile = new ZipFile(zipFullFileName); ArrayList<File> addFiles = new ArrayList<>(); for (String fileName : fullFileNameList) { addFiles.add(new File(fileName)); } ZipParameters parameters = new ZipParameters(); parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE); parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL); if (StringUtil.isNotEmpty(rootFolderInZip)) { if (rootFolderInZip.endsWith("/") == false) { rootFolderInZip = rootFolderInZip + "/"; } parameters.setRootFolderInZip(rootFolderInZip); } zipFile.addFiles(addFiles, parameters); return true; } catch (ZipException e) { e.printStackTrace(); System.out.println("添加文件失败:\n" + e.getMessage()); return false; } } /** * 从压缩文件中删除子文件 * @param zipFullFileName * @param fileName * @return */ public static boolean deleteFileInZip(String zipFullFileName, String fileName) { try { ZipFile zipFile = new ZipFile(zipFullFileName); zipFile.removeFile(fileName); return true; } catch (ZipException e) { e.printStackTrace(); System.out.println("删除文件失败:\n" + e.getMessage()); return false; } }
本文来自博客园,作者:小辉辉。。,转载请注明原文链接:https://www.cnblogs.com/zjylsh/p/15507221.html