灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:3067回复:0

IO操作之使用zip包压缩和解压缩文件

楼主#
更多 发布于:2013-08-02 09:31
java API中的import java.util.zip.*;包下包含了Java对于压缩文件的所有相关操作。
我们可以使用该包中的方法,结合IO中的相关知识,进行文件的压缩和解压缩相关操作。
ZipFile
java中的每一个压缩文件都是可以使用ZipFile来进行表示的。
[java]
File file = new File("F:/zippath.zip");
ZipFile zipFile = new ZipFile(file);
System.out.println("压缩文件的名称为:" + zipFile.getName());
        File file = new File("F:/zippath.zip");
        ZipFile zipFile = new ZipFile(file);
        System.out.println("压缩文件的名称为:" + zipFile.getName());
压缩单个文件
[java]
  /** 压缩单个文件*/
  public static void ZipFile(String filepath ,String zippath) {
    try {
          File file = new File(filepath);
          File zipFile = new File(zippath);
          InputStream input = new FileInputStream(file);
          ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFile));
          zipOut.putNextEntry(new ZipEntry(file.getName()));
          int temp = 0;
          while((temp = input.read()) != -1){
              zipOut.write(temp);
          }
          input.close();
          zipOut.close();
} catch (Exception e) {
    e.printStackTrace();
}
    /** 压缩单个文件*/
    public static void ZipFile(String filepath ,String zippath) {
     try {
            File file = new File(filepath);
            File zipFile = new File(zippath);
            InputStream input = new FileInputStream(file);
            ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFile));
            zipOut.putNextEntry(new ZipEntry(file.getName()));
            int temp = 0;
            while((temp = input.read()) != -1){
                zipOut.write(temp);
            }
            input.close();
            zipOut.close();
  } catch (Exception e) {
   e.printStackTrace();
  }
 }应用:
[java]
ZipFile("d:/hello.txt", "d:/hello.zip");
ZipFile("d:/hello.txt", "d:/hello.zip");
压缩多个文件(文件夹)
[java]
  /** 一次性压缩多个文件,文件存放至一个文件夹中*/
  public static void ZipMultiFile(String filepath ,String zippath) {
try {
       File file = new File(filepath);// 要被压缩的文件夹  
       File zipFile = new File(zippath);
       InputStream input = null;
       ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFile));
       if(file.isDirectory()){
           File[] files = file.listFiles();
           for(int i = 0; i < files.length; ++i){
               input = new FileInputStream(files);
              zipOut.putNextEntry(new ZipEntry(file.getName() + File.separator + files.getName()));
               int temp = 0;
               while((temp = input.read()) != -1){
                   zipOut.write(temp);
               }
               input.close();
           }
       }
       zipOut.close();
} catch (Exception e) {
    e.printStackTrace();
}
    /** 一次性压缩多个文件,文件存放至一个文件夹中*/
    public static void ZipMultiFile(String filepath ,String zippath) {
  try {
         File file = new File(filepath);// 要被压缩的文件夹
         File zipFile = new File(zippath);
         InputStream input = null;
         ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFile));
         if(file.isDirectory()){
             File[] files = file.listFiles();
             for(int i = 0; i < files.length; ++i){
                 input = new FileInputStream(files);
                 zipOut.putNextEntry(new ZipEntry(file.getName() + File.separator + files.getName()));
                 int temp = 0;
                 while((temp = input.read()) != -1){
                     zipOut.write(temp);
                 }
                 input.close();
             }
         }
         zipOut.close();
  } catch (Exception e) {
   e.printStackTrace();
  }
 }应用:
[java]
ZipMultiFile("f:/uu", "f:/zippath.zip");
ZipMultiFile("f:/uu", "f:/zippath.zip");
解压缩单个文件
[java]
 /**  解压缩(解压缩单个文件)*/
   public static void ZipContraFile(String zippath ,String outfilepath ,String filename) {
    try {
        File file = new File(zippath);//压缩文件路径和文件名  
        File outFile = new File(outfilepath);//解压后路径和文件名  
        ZipFile zipFile = new ZipFile(file);
        ZipEntry entry = zipFile.getEntry(filename);//所解压的文件名  
        InputStream input = zipFile.getInputStream(entry);
        OutputStream output = new FileOutputStream(outFile);
        int temp = 0;
        while((temp = input.read()) != -1){
            output.write(temp);
        }
        input.close();
        output.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}
    /**  解压缩(解压缩单个文件)*/
    public static void ZipContraFile(String zippath ,String outfilepath ,String filename) {
  try {
         File file = new File(zippath);//压缩文件路径和文件名
         File outFile = new File(outfilepath);//解压后路径和文件名
         ZipFile zipFile = new ZipFile(file);
         ZipEntry entry = zipFile.getEntry(filename);//所解压的文件名
         InputStream input = zipFile.getInputStream(entry);
         OutputStream output = new FileOutputStream(outFile);
         int temp = 0;
         while((temp = input.read()) != -1){
             output.write(temp);
         }
         input.close();
         output.close();
  } catch (Exception e) {
   e.printStackTrace();
  }
 }应用:
[java]
ZipContraFile("d:/hello.zip","d:/eee.txt", "hello.txt");
ZipContraFile("d:/hello.zip","d:/eee.txt", "hello.txt");
 解压缩多个文件
ZipInputStream类:
当我们需要解压缩多个文件的时候,ZipEntry就无法使用了。
 如果想操作更加复杂的压缩文件,我们就必须使用ZipInputStream类。
[java]
 /**  解压缩(压缩文件中包含多个文件)可代替上面的方法使用。
   * ZipInputStream类
   * 当我们需要解压缩多个文件的时候,ZipEntry就无法使用了,
   * 如果想操作更加复杂的压缩文件,我们就必须使用ZipInputStream类
   * */
  public static void ZipContraMultiFile(String zippath ,String outzippath){
    try {
          File file = new File(zippath);
          File outFile = null;
          ZipFile zipFile = new ZipFile(file);
          ZipInputStream zipInput = new ZipInputStream(new FileInputStream(file));
          ZipEntry entry = null;
          InputStream input = null;
          OutputStream output = null;
          while((entry = zipInput.getNextEntry()) != null){
              System.out.println("解压缩" + entry.getName() + "文件");
              outFile = new File(outzippath + File.separator + entry.getName());
              if(!outFile.getParentFile().exists()){
                  outFile.getParentFile().mkdir();
              }
              if(!outFile.exists()){
                  outFile.createNewFile();
              }
              input = zipFile.getInputStream(entry);
              output = new FileOutputStream(outFile);
              int temp = 0;
              while((temp = input.read()) != -1){
                  output.write(temp);
              }
              input.close();
              output.close();
          }
} catch (Exception e) {
    e.printStackTrace();
}
  }
    /**  解压缩(压缩文件中包含多个文件)可代替上面的方法使用。
     * ZipInputStream类
     * 当我们需要解压缩多个文件的时候,ZipEntry就无法使用了,
     * 如果想操作更加复杂的压缩文件,我们就必须使用ZipInputStream类
     * */
    public static void ZipContraMultiFile(String zippath ,String outzippath){
     try {
            File file = new File(zippath);
            File outFile = null;
            ZipFile zipFile = new ZipFile(file);
            ZipInputStream zipInput = new ZipInputStream(new FileInputStream(file));
            ZipEntry entry = null;
            InputStream input = null;
            OutputStream output = null;
            while((entry = zipInput.getNextEntry()) != null){
                System.out.println("解压缩" + entry.getName() + "文件");
                outFile = new File(outzippath + File.separator + entry.getName());
                if(!outFile.getParentFile().exists()){
                    outFile.getParentFile().mkdir();
                }
                if(!outFile.exists()){
                    outFile.createNewFile();
                }
                input = zipFile.getInputStream(entry);
                output = new FileOutputStream(outFile);
                int temp = 0;
                while((temp = input.read()) != -1){
                    output.write(temp);
                }
                input.close();
                output.close();
            }
  } catch (Exception e) {
   e.printStackTrace();
  }
    }应用:
[java]
ZipContraMultiFile("f:/zippath.zip", "d:/");
ZipContraMultiFile("d:/hello.zip", "d:/");
        ZipContraMultiFile("f:/zippath.zip", "d:/");
        ZipContraMultiFile("d:/hello.zip", "d:/");
 

喜欢0 评分0
游客

返回顶部