功能需求:
壓縮多個文件成一個zip,並把原始的各個文件刪除
實現:
傳壓縮包文件名(全路徑)、需要壓縮的一個或多個文件名(全路徑)和是否刪除原始文件標誌(可選是否刪除)
話不多說,放碼出來。。。
壓縮類:
package oracleTestProject;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
/**
* @Description ZIP工具類
* @Author lsdeng
* @CreateTime 2020年4月5日 下午12:03:35
* @HistoryLog
*/
public class ZipUtil {
public boolean DeleteTempFile = true; // 是否刪除臨時文件標誌
public List<String> sFileNames = null;//需要壓縮的文件名集合(全路徑)
public String zipFileName = "";//壓縮包文件名(全路徑)
public boolean CreateZip() throws Exception {
boolean isCreate = true;
ZipOutputStream out = null;
FileInputStream in = null;
try {
File zipFile = new File(zipFileName);
//1.壓縮文件
File srcFile[] = new File[sFileNames.size()];
for (int i = 0; i < sFileNames.size(); i++) {
srcFile[i] = new File(sFileNames.get(i));
}
byte[] byt = new byte[1024];
out = new ZipOutputStream(new FileOutputStream(zipFile));
for (int i = 0; i < srcFile.length; i++) {
try{
in = new FileInputStream(srcFile[i]);
out.putNextEntry(new ZipEntry(srcFile[i].getName()));
int length;
while((length=in.read(byt)) > 0){
out.write(byt,0,length);
}
out.closeEntry();
in.close();
}catch (Exception e){
isCreate = false;
e.printStackTrace();
throw new Exception(e);
}finally{
try{
in.close();
}catch (Exception e1){
}
}
}
out.close();
//2.刪除服務器上的臨時文件
if(DeleteTempFile){
for (int i = 0; i < srcFile.length; i++) {
File temFile = srcFile[i];
if(temFile.exists() && temFile.isFile()){
temFile.delete();
}
}
}
} catch (Exception e) {
isCreate = false;
}finally {
try {
out.close();
in.close();
} catch (IOException e) {
}
}
return isCreate;
}
public boolean isDeleteTempFile() {
return DeleteTempFile;
}
public void setDeleteTempFile(boolean deleteTempFile) {
DeleteTempFile = deleteTempFile;
}
public List<String> getsFileNames() {
return sFileNames;
}
public void setsFileNames(List<String> sFileNames) {
this.sFileNames = sFileNames;
}
public String getZipFileName() {
return zipFileName;
}
public void setZipFileName(String zipFileName) {
this.zipFileName = zipFileName;
}
}
測試類:
package oracleTestProject;
import java.util.ArrayList;
import java.util.List;
public class MyTest20200405 {
public static void main(String[] args) throws Exception {
try {
String zipFileName = "F:/study/20200405/壓縮包001.zip";
List<String> sFileNames = new ArrayList<String>();
sFileNames.add("F:/study/20200405/DOC文檔.doc");
ZipUtil zu = new ZipUtil();
zu.setsFileNames(sFileNames);
zu.setDeleteTempFile(false);
zu.setZipFileName(zipFileName);
zu.CreateZip();
} catch (Exception e) {
e.printStackTrace();
}
}
}
壓縮結果:
如有不妥之處歡迎指正,謝謝。