`
a11632
  • 浏览: 7560 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

java压缩文件夹或文件

阅读更多

package com.proxy;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class ZipUtil {
 public enum zipEnum {
  byteLength(1024 * 2), srcPath("d:/快盘-学习"), objPath("d:/"), zipName(
    "ac.zip");
  zipEnum(int intData) {
   this.intData = intData;
  }

  zipEnum(String strData) {
   this.strData = strData;
  }

  public int getIntData() {
   return intData;
  }

  public String getStrData() {
   return strData;
  }

  private int intData = -1;
  private String strData = null;
 }

 /**
  * @param args
  */
 public static void main(String[] args) {
  zipDir(zipEnum.srcPath.getStrData(), zipEnum.objPath.getStrData(),
    zipEnum.zipName.getStrData());
 }
 /**
  * @判断输入的地址是文件名还是文件夹名
  * @param srcPath:被压缩的文件或文件夹(源文件)
  * @param objPath:压缩至某个路径
  * @param zipName:压缩文件名
  */
 public static void zipDir(String srcPath, String objPath, String zipName) {
  if (srcPath == null) {
   return;
  }
  File fileIn = new File(srcPath);
  File fileOut = new File(objPath, zipName);
  ZipOutputStream zipOut = null;
  try {
   zipOut = new ZipOutputStream(new FileOutputStream(fileOut));
   //判断源文件是否是文件夹
   if (!fileIn.isAbsolute()) {
    //如果是文件
    if (fileIn.isFile()) {
     zipFile("", fileIn, zipOut);
    } else {
     System.out.println("输入的源文件地址错误");
    }
   } else {
    //如果是文件夹
    zipDirFile("", fileIn, zipOut);
   }
  } catch (FileNotFoundException e) {
   System.out.println("目标文件错误");
   e.printStackTrace();
  } finally {
   if (zipOut != null) {
    try {
     zipOut.close();
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
  }

 }
 /**
  * @压缩文件
  * @param relName:压缩包内的路径位置
  * @param fileIn:被压缩的文件
  * @param zipOut:压缩输出
  */
 private static void zipFile(String relName, File fileIn,
   ZipOutputStream zipOut) {
  //relName + fileIn.getName()类似于java文件夹下面java.txt文件这样的路径
  ZipEntry zipEntry = new ZipEntry(relName + fileIn.getName());
  FileInputStream fileSteam = null;
  byte[] buf = new byte[zipEnum.byteLength.getIntData()];
  int num = 0;
  try {
   fileSteam = new FileInputStream(fileIn);
   zipOut.putNextEntry(zipEntry);
   while ((num = fileSteam.read(buf)) != -1) {
    zipOut.write(buf, 0, num);
   }
  } catch (IOException e) {
   e.printStackTrace();
  } finally {
   if (fileSteam != null) {
    try {
     fileSteam.close();
    } catch (IOException e) {
     e.printStackTrace();
    }
   }
   if (zipEntry != null) {
    zipEntry.clone();
   }
  }
 }
 /**
  * @遍历文件夹中的文件或文件夹
  * @param relName:压缩包内的路径位置
  * @param fileIn:被压缩的文件
  * @param zipOut:压缩输出
  */
 private static void zipDirFile(String relName, File fileIn,
   ZipOutputStream zipOut) {
  //如果是文件
  if (fileIn.isFile()) {
   zipFile(relName, fileIn, zipOut);
  } else {
   String relNames = relName + fileIn.getName() + File.separator;
   File[] files = fileIn.listFiles();
   for (File fi : files) {
    zipDirFile(relNames, fi, zipOut);
   }
   files.clone();
  }
 }
}

1
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics