文件解压缩(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; } }
posted @ 2021-11-04 10:54  小辉辉。。  阅读(80)  评论(0编辑  收藏  举报