@
文件加密壓縮
在現如今已經可以實現大部分功能的互聯網需求中,安全成為了需要的非必需品,工作需求中會遇到對導出的 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;
}
具體代碼請關注個人公眾號【charmsongo】留言「zip」獲取
說在最后,如果有什么問題,請留言,我會盡量在第一時間給您答復