java實現zip壓縮檔案/資料夾
由於java.util.zip.ZipOutputStream有中文亂碼問題,所以採用org.apache.tools.zip.ZipOutputStream。
以下是程式碼:
以下是程式碼:
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.zip.CRC32;
import java.util.zip.CheckedOutputStream;
import org.apache.log4j.Logger;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;
/**
* @ClassName: ZipCompressor
* @CreateTime Apr 28, 2013 1:12:16 PM
* @author : Mayi
* @Description: 壓縮檔案的通用工具類-採用org.apache.tools.zip.ZipOutputStream實現,較複雜。
*
*/
public class ZipCompressor {
private Logger logger = Logger.getLogger(ZipCompressor.class);
static final int BUFFER = 8192;
private File zipFile;
/**
* 壓縮檔案建構函式
* @param pathName 壓縮的檔案存放目錄
*/
public ZipCompressor(String pathName) {
zipFile = new File(pathName);
}
/**
* 執行壓縮操作
* @param srcPathName 被壓縮的檔案/資料夾
*/
public void compressExe(String srcPathName) {
File file = new File(srcPathName);
if (!file.exists()){
throw new RuntimeException(srcPathName + "不存在!");
}
try {
FileOutputStream fileOutputStream = new FileOutputStream(zipFile);
CheckedOutputStream cos = new CheckedOutputStream(fileOutputStream,new CRC32());
ZipOutputStream out = new ZipOutputStream(cos);
String basedir = "";
compressByType(file, out, basedir);
out.close();
} catch (Exception e) {
e.printStackTrace();
logger.error("執行壓縮操作時發生異常:"+e);
throw new RuntimeException(e);
}
}
/**
* 判斷是目錄還是檔案,根據型別(檔案/資料夾)執行不同的壓縮方法
* @param file
* @param out
* @param basedir
*/
private void compressByType(File file, ZipOutputStream out, String basedir) {
/* 判斷是目錄還是檔案 */
if (file.isDirectory()) {
logger.info("壓縮:" + basedir + file.getName());
this.compressDirectory(file, out, basedir);
} else {
logger.info("壓縮:" + basedir + file.getName());
this.compressFile(file, out, basedir);
}
}
/**
* 壓縮一個目錄
* @param dir
* @param out
* @param basedir
*/
private void compressDirectory(File dir, ZipOutputStream out, String basedir) {
if (!dir.exists()){
return;
}
File[] files = dir.listFiles();
for (int i = 0; i < files.length; i++) {
/* 遞迴 */
compressByType(files[i], out, basedir + dir.getName() + "/");
}
}
/**
* 壓縮一個檔案
* @param file
* @param out
* @param basedir
*/
private void compressFile(File file, ZipOutputStream out, String basedir) {
if (!file.exists()) {
return;
}
try {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
ZipEntry entry = new ZipEntry(basedir + file.getName());
out.putNextEntry(entry);
int count;
byte data[] = new byte[BUFFER];
while ((count = bis.read(data, 0, BUFFER)) != -1) {
out.write(data, 0, count);
}
bis.close();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
import java.io.File;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.taskdefs.Zip;
import org.apache.tools.ant.types.FileSet;
/**
* @ClassName: ZipCompressorByAnt
* @CreateTime Apr 28, 2013 1:23:45 PM
* @author : Mayi
* @Description: 壓縮檔案的通用工具類-採用ant中的org.apache.tools.ant.taskdefs.Zip來實現,更加簡單。
*
*/
public class ZipCompressorByAnt {
private File zipFile;
/**
* 壓縮檔案建構函式
* @param pathName 最終壓縮生成的壓縮檔案:目錄+壓縮檔名.zip
*/
public ZipCompressorByAnt(String finalFile) {
zipFile = new File(finalFile);
}
/**
* 執行壓縮操作
* @param srcPathName 需要被壓縮的檔案/資料夾
*/
public void compressExe(String srcPathName) {
File srcdir = new File(srcPathName);
if (!srcdir.exists()){
throw new RuntimeException(srcPathName + "不存在!");
}
Project prj = new Project();
Zip zip = new Zip();
zip.setProject(prj);
zip.setDestFile(zipFile);
FileSet fileSet = new FileSet();
fileSet.setProject(prj);
fileSet.setDir(srcdir);
//fileSet.setIncludes("**/*.java"); //包括哪些檔案或資料夾 eg:zip.setIncludes("*.java");
//fileSet.setExcludes(...); //排除哪些檔案或資料夾
zip.addFileset(fileSet);
zip.execute();
}
}
測試一下
- package net.szh.zip;
- public class TestZip {
- public static void main(String[] args) {
- ZipCompressor zc = new ZipCompressor("E:\\szhzip.zip");
- zc.compress("E:\\test");
- ZipCompressorByAnt zca = new ZipCompressorByAnt("E:\\szhzipant.zip");
- zca.compress("E:\\test");
- }
- }
參考自:ITeye
相關文章
- Java實現解壓縮檔案和資料夾Java
- Java實現壓縮資料夾Java
- Java實現檔案壓縮與解壓[zip格式,gzip格式]Java
- Windows的壓縮資料夾(zip/cab)Windows
- java 壓縮(解壓)檔案或者資料夾工具類Java
- java 把檔案壓縮成 zipJava
- java 生成 zip格式 壓縮檔案Java
- 利用Java實現zip壓縮/解壓縮 (轉)Java
- 初級:如何在 Linux 中 zip 壓縮檔案和資料夾Linux
- 使用java API進行zip遞迴壓縮資料夾以及解壓JavaAPI遞迴
- JAVA基礎:利用Java實現zip壓縮解壓縮(轉)Java
- Linux加密壓縮檔案/資料夾Linux加密
- zip壓縮檔案處理方案(Zip4j壓縮和解壓)
- node ~ zip壓縮 && 檔案加密加密
- ZipArchive解壓縮zip檔案Hive
- 使用Java API進行tar.gz檔案及資料夾壓縮解壓縮JavaAPI
- 使用libzip壓縮檔案和資料夾
- Java使用Zip壓縮Java
- 使用org.apache.tools.zip實現zip壓縮和解壓Apache
- 壓縮檔案格式rar和zip有什麼區別 壓縮檔案格式rar和zip哪個好
- Linux科研武器庫 - 檔案壓縮與解壓縮 - zip / unzipLinux
- Java檔案壓縮Java
- java 檔案壓縮Java
- zip壓縮和解壓縮
- c# 上傳壓縮包 解壓,遍歷資料夾和檔案C#
- php 建立壓縮包zip,並將指定檔案放入zip中PHP
- php 把檔案加入到現有的zip壓縮包中PHP
- 使用jar與zip壓縮解壓檔案的區別JAR
- Java實現多檔案邊壓縮邊下載Java
- Java中實現複製檔案或資料夾Java
- Java使用執行緒池遞迴壓縮資料夾下面的所有子檔案Java執行緒遞迴
- java 壓縮包 遍歷解壓 zip 和 7z 指定格式檔案Java
- 將多個檔案壓縮成zip檔案進行下載
- 壓縮檔案格式rar和zip有什麼區別 zip和rar哪個是無失真壓縮
- Laravel 中建立 Zip 壓縮檔案並提供下載Laravel
- 批處理 壓縮zip 並過濾部分檔案
- 工作經驗: linux 壓縮當前資料夾下所有檔案Linux
- tar解壓到指定目錄並去掉壓縮檔案的層級資料夾