java中文件如何加密壓縮? 原

文件加密壓縮

在現如今已經可以實現大部分功能的互聯網需求中,安全成爲了需要的非必需品,工作需求中會遇到對導出的 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();
		}

	}

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;
    }

具體代碼請到 github 自行下載

說在最後,如果有什麼問題,請留言,我會盡量在第一時間給您答覆

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章