java中檔案如何加密壓縮?

OkidoGreen發表於2020-04-05

https://blog.csdn.net/qq_29175301/article/details/83444557
終於等到你檔案加密壓縮1.單個檔案加密壓縮2.多檔案加密壓縮
檔案加密壓縮
在現如今已經可以實現大部分功能的網際網路需求中,安全成為了需要的非必需品,工作需求中會遇到對匯出的 excel 報表 做加密壓縮的問題,今天有時間總結一下,我這裡簡單列舉功能程式碼,連帶其它程式碼文末會一併給出。
1.單個檔案加密壓縮
單個檔案加密方法,需傳輸 3 個引數:被壓縮原始檔,壓縮目標檔案和加密金鑰,如下
 

   /**
     * @Title: encrypt_zip 
     * @Description:將指定路徑下的檔案壓縮至指定zip檔案,並以指定密碼加密,若密碼為空,則不進行加密保護 
     * @param src_file 待壓縮檔案路徑
     * @param dst_file zip路徑+檔名 
     * @param encode 加密密碼  
     * @return 
     */
    public static void encrypt_zip(String src_file, String dst_file, String encode) {
        File file = new File(src_file);

        ZipParameters parameters = new ZipParameters();
        parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);//壓縮方式
        parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL); // 壓縮級別

        parameters.setEncryptFiles(true);
        parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_STANDARD);//加密方式
        parameters.setPassword(encode.toCharArray());//設定密碼

        try {
            ZipFile zipFile = new ZipFile(dst_file);
            zipFile.setFileNameCharset("gbk");
            zipFile.addFile(file, parameters);

        } catch (ZipException e) {
            e.printStackTrace();
        }

    }


1234567891011121314151617181920212223242526272829
2.多檔案加密壓縮
多檔案加密壓縮和單檔案類似,但是,這個方法包含上面的方法,甚至功能上可以替換上面方法,具體看下 code
    

/**
     * @Title: zipFilesAndEncrypt 
     * @Description: 將指定路徑下的檔案壓縮至指定zip檔案,並以指定密碼加密,若密碼為空,則不進行加密保護 
     * @param srcFileName 待壓縮檔案路徑 或 資料夾路徑
     * @param zipFileName zip路徑+檔名 
     * @param password 加密密碼  
     * @return 
     */
    public static void zipFilesAndEncrypt(String srcFileName,String zipFileName,String password){  
        
        if(StrTool.is_empty(srcFileName) || StrTool.is_empty(zipFileName)){  
            System.out.println("請求的壓縮路徑或者檔名有誤");
            return;
        }  
        try {  
            ZipParameters parameters = new ZipParameters();  
            parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);//壓縮方式
            parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);//壓縮級別
            if(!StrTool.is_empty(password)){  
                parameters.setEncryptFiles(true);     
                parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_STANDARD);//加密方式
                parameters.setPassword(password);  
            }  
            
            ArrayList<File> filesToAdd=getFiles(srcFileName);
            
            ZipFile zipFile = new ZipFile(zipFileName); 
            zipFile.setFileNameCharset("gbk");
            zipFile.addFiles(filesToAdd, parameters); 
        } catch (ZipException e) {  
            System.out.println("檔案壓縮出錯");
            e.printStackTrace();
        } 
    }
    
    //通過路徑獲取壓縮檔案集合
    private static ArrayList<File> getFiles(String srcFileName){
        ArrayList<File> filesToAdd = new ArrayList<File>();
        File file=new File(srcFileName);
        File[] files = new File[0]; 
        if(file.isDirectory()){
            files = file.listFiles();
            for(int i=0;i<files.length;i++){
                if(files[i].getName().endsWith(".xls")){//xls結尾的excel新增壓縮集合
                    filesToAdd.add(new File(files[i].getPath()));
                    System.out.println("檔案:"+files[i].getPath());
                }
            }
        } else {
            filesToAdd.add(new File(file.getPath()));
        }
        
        return filesToAdd;
    }

 

相關文章