java實現文件壓縮並加密-基於zip4j


近期由於工作需要,基於zip4j實現了一個針對文件壓縮並加密的功能,代碼參考如下:

/**
* 
* @Title: zipFilesAndEncrypt
* @Description: 將指定路徑下的文件壓縮至指定zip文件,並以指定密碼加密 若密碼為空,則不進行加密保護
* @param srcFileName 待壓縮文件路徑
* @param zipFileName zip文件名
* @param password 加密密碼 
* @return
* @throws Exception 
*/
public static void zipFilesAndEncrypt(String srcFileName,String zipFileName,String password) throws Exception{
ZipOutputStream outputStream = null;
InputStream inputStream = null;
if(StringUtils.isEmpty(srcFileName) || StringUtils.isEmpty(zipFileName)){
throw new NullArgumentException("待壓縮文件或者壓縮文件名");
}
try {
File srcFile = new File(srcFileName);   
File[] files = new File[0];
if (srcFile.isDirectory()) {
files = srcFile.listFiles();
} else {
files = new File[1];
files[0] = srcFile;
}
outputStream = new ZipOutputStream(new FileOutputStream(new File(zipFileName)));
ZipParameters parameters = new ZipParameters();
parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
if(!StringUtils.isEmpty(password)){
parameters.setEncryptFiles(true);
//Zip4j supports AES or Standard Zip Encryption (also called ZipCrypto)
//If you choose to use Standard Zip Encryption, please have a look at example
//as some additional steps need to be done while using ZipOutputStreams with
//Standard Zip Encryption
parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES);
parameters.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256);
parameters.setPassword(password);
}

//Now we loop through each file and read this file with an inputstream
//and write it to the ZipOutputStream.
int fileNums = files.length;
for (int i = 0; i < fileNums; i++) {
File file = (File)files[i];

//This will initiate ZipOutputStream to include the file
//with the input parameters
outputStream.putNextEntry(file,parameters);

//If this file is a directory, then no further processing is required
//and we close the entry (Please note that we do not close the outputstream yet)
if (file.isDirectory()) {
outputStream.closeEntry();
continue;
}

inputStream = new FileInputStream(file);
byte[] readBuff = new byte[4096];
int readLen = -1;
//Read the file content and write it to the OutputStream
while ((readLen = inputStream.read(readBuff)) != -1) {
outputStream.write(readBuff, 0, readLen);
}
//Once the content of the file is copied, this entry to the zip file
//needs to be closed. ZipOutputStream updates necessary header information
//for this file in this step
outputStream.closeEntry();
inputStream.close();
}
//ZipOutputStream now writes zip header information to the zip file
outputStream.finish();
} catch (Exception e) {
log.error("文件壓縮出錯", e);
throw e;
} finally {
if (outputStream != null) {
try {
outputStream.close();
} catch (IOException e) {
log.error("壓縮文件輸出錯誤", e);
throw e;
}
}
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
log.error("壓縮文件錯誤", e);
throw e;
}
}
}
}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM