使用ant提供的zip進行壓縮和解壓縮,支持中文
import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.util.Enumeration;import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipFile; import org.apache.tools.zip.ZipOutputStream;
/**
- @author yangfei
@since 2013-1-27 */ public class ZipUtilApache {
static final int BUFFER = 1024;
public static void zip(String destDirPath, String inputPath)
throws Exception { File inputFile = new File(inputPath); // 創建壓縮文件 File destDir = new File(destDirPath); if (!destDir.exists()) { destDir.mkdir(); } File destFile = new File(destDir + File.separator + inputFile.getName() + ".zip"); // 遞歸壓縮方法 ZipOutputStream out = new ZipOutputStream( new FileOutputStream(destFile)); // 設置壓縮編碼.設置為GBK后在windows下就不會亂碼了,如果要放到Linux或者Unix下就不要設置了 out.setEncoding("GBK"); zip(out, inputFile, ""); System.out.println("zip done"); out.close();
}
private static void zip(ZipOutputStream out, File f, String base)
throws Exception { System.out.println("Zipping " + f.getName()); // 記錄日志,開始壓縮 if (f.isDirectory()) { // 如果是文件夾,則獲取下面的所有文件 File[] fl = f.listFiles(); if (base.length() > 0) { out.putNextEntry(new ZipEntry(base + "/"));// 此處要將文件寫到文件夾中只用在文件名前加"/"再加文件夾名 } base = base.length() == 0 ? "" : base + "/"; for (int i = 0; i < fl.length; i++) { zip(out, fl[i], base + fl[i].getName()); } } else { // 如果是文件,則壓縮 out.putNextEntry(new ZipEntry(base)); // 生成下一個壓縮節點 FileInputStream in = new FileInputStream(f); // 讀取文件內容 int len; byte[] buf = new byte[BUFFER]; while ((len = in.read(buf, 0, BUFFER)) != -1) { out.write(buf, 0, len); // 寫入到壓縮包 } in.close(); out.closeEntry(); }
}
/**
- 解壓縮zip文件
- @param fileName
- 要解壓的文件名 包含路徑 如:"c:\\test.zip"
- @param filePath
- 解壓后存放文件的路徑 如:"c:\\temp"
@throws Exception */ public static void unZip(String fileName, String destFilePath)
throws Exception {
ZipFile zipFile = new ZipFile(fileName, "GBK"); // 以“GBK”編碼創建zip文件,用來處理winRAR壓縮的文件。 Enumeration emu = zipFile.getEntries(); while (emu.hasMoreElements()) {
ZipEntry entry = (ZipEntry) emu.nextElement(); if (entry.isDirectory()) { File dir = new File(destFilePath + entry.getName()); if (!dir.exists()) { dir.mkdirs(); } continue; } BufferedInputStream bis = new BufferedInputStream(zipFile .getInputStream(entry)); File file = new File(destFilePath + entry.getName()); File parent = file.getParentFile(); if (parent != null && (!parent.exists())) { parent.mkdirs(); } FileOutputStream fos = new FileOutputStream(file); BufferedOutputStream bos = new BufferedOutputStream(fos, BUFFER); byte[] buf = new byte[BUFFER]; int len = 0; while ((len = bis.read(buf, 0, BUFFER)) != -1) { fos.write(buf, 0, len); } bos.flush(); bos.close(); bis.close(); System.out.println("解壓文件:" + file.getName());
} zipFile.close(); } }</pre>
本文由用戶 yefx 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!