java 壓縮和解壓縮文件

uyu 9年前發布 | 2K 次閱讀 Java java 招聘 北京

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipFile;
import org.apache.tools.zip.ZipOutputStream;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**

  • 壓縮,解壓,刪除,拷貝操作。
  • 注意:此類中用到的壓縮類ZipEntry等都來自于org.apache.tools包而非java.util。此包在ant.jar中有。
    • @author Tony */ public class FileUtil { protected static Logger log = LoggerFactory.getLogger(FileUtil.class);

      /**

      • 壓縮文件
      • @param inputFileName
      • 要壓縮的文件或文件夾路徑,例如:c:\a.txt,c:\a\
      • @param outputFileName
      • 輸出zip文件的路徑,例如:c:\a.zip
      • */ public static void zip(String inputFileName, String outputFileName)
         throws Exception {
        
        ZipOutputStream out = new ZipOutputStream(new FileOutputStream(
             outputFileName));
        
        zip(out, new File(inputFileName), ""); log.debug("壓縮完成!"); out.closeEntry(); out.close(); }

      /**

      • 壓縮文件
      • @param out
      • org.apache.tools.zip.ZipOutputStream
      • @param file
      • 待壓縮的文件
      • @param base
      • 壓縮的根目錄
      • */ private static void zip(ZipOutputStream out, File file, String base)
         throws Exception {
        
        if (file.isDirectory()) {
         File[] fl = file.listFiles();
         base = base.length() == 0 ? "" : base + File.separator;
         for (int i = 0; i < fl.length; i++) {
             zip(out, fl[i], base + fl[i].getName());
         }
        
        } else {
         out.putNextEntry(new ZipEntry(base));
         log.debug("添加壓縮文件:" + base);
         FileInputStream in = new FileInputStream(file);
         int b;
         while ((b = in.read()) != -1) {
             out.write(b);
         }
         in.close();
        
        } }

      /**

      • 解壓zip文件
      • @param zipFileName
      • 待解壓的zip文件路徑,例如:c:\a.zip
      • @param outputDirectory
      • 解壓目標文件夾,例如:c:\a\
      • */ public static void unZip(String zipFileName, String outputDirectory)
         throws Exception {
        
        ZipFile zipFile = new ZipFile(zipFileName); try {
         Enumeration<?> e = zipFile.getEntries();
         ZipEntry zipEntry = null;
         createDirectory(outputDirectory, "");
         while (e.hasMoreElements()) {
             zipEntry = (ZipEntry) e.nextElement();
             log.debug("解壓:" + zipEntry.getName());
             if (zipEntry.isDirectory()) {
                 String name = zipEntry.getName();
                 name = name.substring(0, name.length() - 1);
                 File f = new File(outputDirectory + File.separator + name);
                 f.mkdir();
                 log.debug("創建目錄:" + outputDirectory + File.separator + name);
             } else {
                 String fileName = zipEntry.getName();
                 fileName = fileName.replace('\\', '/');
                 if (fileName.indexOf("/") != -1) {
                     createDirectory(outputDirectory, fileName.substring(0,
                             fileName.lastIndexOf("/")));
                     fileName = fileName.substring(
                             fileName.lastIndexOf("/") + 1,
                             fileName.length());
                 }
                 File f = new File(outputDirectory + File.separator
                         + zipEntry.getName());
                 f.createNewFile();
                 InputStream in = zipFile.getInputStream(zipEntry);
                 FileOutputStream out = new FileOutputStream(f);
                 byte[] by = new byte[1024];
                 int c;
                 while ((c = in.read(by)) != -1) {
                     out.write(by, 0, c);
                 }
                 in.close();
                 out.close();
             }
         }
        
        } catch (Exception ex) {
         System.out.println(ex.getMessage());
        
        } finally {
         zipFile.close();
         log.debug("解壓完成!");
        
        } }

} </pre>

 本文由用戶 uyu 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!