请选择 进入手机版 | 继续访问电脑版
设为首页 收藏本站
开启辅助访问 切换到宽版

新浪微博登陆

只需一步, 快速开始

QQ登录

只需一步,快速开始

切换风格 立即注册 找回密码

Java教程网

新浪微博达人勋

2973

积分

837

帖子

686

贡献

Rank: 6Rank: 6

积分
2973

社区QQ达人

发表于 2017-2-16 19:29:49 | 显示全部楼层 |阅读模式
代码如下

  1. package cn.tzz.zip;

  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.FileOutputStream;
  5. import java.io.InputStream;
  6. import java.io.OutputStream;
  7. import java.util.zip.ZipEntry;
  8. import java.util.zip.ZipFile;
  9. import java.util.zip.ZipInputStream;
  10. import java.util.zip.ZipOutputStream;

  11. public class ZipUtils {

  12.         /**
  13.          * 文件压缩(支持一次压缩多个文件,文件存放至一个文件夹中)
  14.          * 中文名乱码,采用Apache的zip包可解决
  15.          */
  16.     public static void ZipFile(String filepath ,String zippath) {
  17.                 try {
  18.                 File file = new File(filepath);// 要被压缩的文件夹
  19.                 File zipFile = new File(zippath);
  20.                 InputStream input = null;
  21.                 ZipOutputStream zipOut = new ZipOutputStream(new FileOutputStream(zipFile));
  22.                 if(file.isDirectory()){//压缩文件夹
  23.                     File[] files = file.listFiles();
  24.                     for(int i = 0; i < files.length; ++i){
  25.                         input = new FileInputStream(files[i]);
  26.                         zipOut.putNextEntry(new ZipEntry(file.getName() + File.separator + files[i].getName()));
  27.                         int temp = 0;
  28.                         while((temp = input.read()) != -1){
  29.                             zipOut.write(temp);
  30.                         }
  31.                         input.close();
  32.                     }
  33.                     zipOut.close();
  34.                 }else{//压缩单个文件
  35.                         input = new FileInputStream(file);
  36.                         String fileName = new String(file.getName().getBytes(), "UTF-8");
  37.                 zipOut.putNextEntry(new ZipEntry(fileName));
  38.                 int temp = 0;
  39.                 while((temp = input.read()) != -1){
  40.                     zipOut.write(temp);
  41.                 }
  42.                 input.close();
  43.                 zipOut.close();
  44.                 }
  45.                 zipOut.close();
  46.                 } catch (Exception e) {
  47.                         e.printStackTrace();
  48.                 }
  49.         }
  50.    
  51.     /**  解压缩(解压缩单个文件)*/
  52.     public static void ZipContraFile(String zippath ,String outfilepath ,String filename) {
  53.                 try {
  54.                 File file = new File(zippath);//压缩文件路径和文件名
  55.                 File outFile = new File(outfilepath);//解压后路径和文件名
  56.                 ZipFile zipFile = new ZipFile(file);
  57.                 ZipEntry entry = zipFile.getEntry(filename);//所解压的文件名
  58.                 InputStream input = zipFile.getInputStream(entry);
  59.                 OutputStream output = new FileOutputStream(outFile);
  60.                 int temp = 0;
  61.                 while((temp = input.read()) != -1){
  62.                     output.write(temp);
  63.                 }
  64.                 input.close();
  65.                 output.close();
  66.                 } catch (Exception e) {
  67.                         e.printStackTrace();
  68.                 }
  69.         }
  70.    
  71.     /**  解压缩(压缩文件中包含多个文件)可代替上面的方法使用。
  72.      * ZipInputStream类
  73.      * 当我们需要解压缩多个文件的时候,ZipEntry就无法使用了,
  74.      * 如果想操作更加复杂的压缩文件,我们就必须使用ZipInputStream类
  75.      * */
  76.     public static void ZipContraMultiFile(String zippath ,String outzippath){
  77.             try {
  78.             File file = new File(zippath);
  79.             File outFile = null;
  80.             ZipFile zipFile = new ZipFile(file);
  81.             ZipInputStream zipInput = new ZipInputStream(new FileInputStream(file));
  82.             ZipEntry entry = null;
  83.             InputStream input = null;
  84.             OutputStream output = null;
  85.             while((entry = zipInput.getNextEntry()) != null){
  86.                 System.out.println("解压缩" + entry.getName() + "文件");
  87.                 outFile = new File(outzippath + File.separator + entry.getName());
  88.                 if(!outFile.getParentFile().exists()){
  89.                     outFile.getParentFile().mkdir();
  90.                 }
  91.                 if(!outFile.exists()){
  92.                     outFile.createNewFile();
  93.                 }
  94.                 input = zipFile.getInputStream(entry);
  95.                 output = new FileOutputStream(outFile);
  96.                 int temp = 0;
  97.                 while((temp = input.read()) != -1){
  98.                     output.write(temp);
  99.                 }
  100.                 input.close();
  101.                 output.close();
  102.             }
  103.                 } catch (Exception e) {
  104.                         e.printStackTrace();
  105.                 }
  106.     }
  107.    
  108.     public static void main(String[] args) {
  109.                 ZipFile("E:/zip/中文名.txt", "E:/zip/压缩单个文件.zip");
  110.                 ZipFile("E:/zip", "E:/压缩多个文件.zip");
  111.                 ZipContraFile("E:/zip/压缩单个文件.zip","E:/zip/解压文件.txt", "1.txt");
  112.                 ZipContraMultiFile("E:/压缩多个文件.zip","E:/zip2");
  113.                 System.out.println("********执行成功**********");
  114.         }
  115. }
复制代码



来自群组: java开发组

新浪微博达人勋

7153

积分

1812

帖子

1763

贡献

Rank: 8Rank: 8

积分
7153

社区QQ达人最佳新人活跃会员热心会员

发表于 2017-2-16 19:30:01 | 显示全部楼层
楼主呀,,,您太有才了。。。

新浪微博达人勋

6959

积分

1811

帖子

1673

贡献

Rank: 8Rank: 8

积分
6959

社区QQ达人最佳新人活跃会员热心会员

发表于 2017-3-1 09:13:46 | 显示全部楼层
介是神马?!!

新浪微博达人勋

6739

积分

1684

帖子

1685

贡献

Rank: 8Rank: 8

积分
6739
发表于 2017-3-3 06:19:37 | 显示全部楼层
传说中的沙发???哇卡卡

新浪微博达人勋

3176

积分

794

帖子

794

贡献

Rank: 8Rank: 8

积分
3176
发表于 2017-3-4 02:00:24 | 显示全部楼层
看起来不错

新浪微博达人勋

6782

积分

1694

帖子

1696

贡献

Rank: 8Rank: 8

积分
6782
发表于 2017-3-5 12:58:33 | 显示全部楼层
我是个凑数的。。。

新浪微博达人勋

6813

积分

1701

帖子

1704

贡献

Rank: 8Rank: 8

积分
6813
发表于 2017-3-9 03:32:32 | 显示全部楼层
元芳你怎么看?

新浪微博达人勋

3176

积分

925

帖子

742

贡献

Rank: 8Rank: 8

积分
3176

社区QQ达人

发表于 2017-3-11 14:51:49 | 显示全部楼层
路过的帮顶

新浪微博达人勋

6708

积分

1677

帖子

1677

贡献

Rank: 8Rank: 8

积分
6708
发表于 2017-3-12 17:24:28 | 显示全部楼层
众里寻他千百度,蓦然回首在这里!

新浪微博达人勋

3005

积分

758

帖子

747

贡献

Rank: 8Rank: 8

积分
3005
发表于 2017-3-15 01:37:28 | 显示全部楼层
向楼主学习
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

关闭

站长推荐 上一条 /1 下一条

小黑屋|手机版|Archiver|Java教程网    

GMT+8, 2019-5-27 19:39 , Processed in 0.343750 second(s), 44 queries .

Powered by Discuz X3.2

© 2001-2013 JAVA教程网

快速回复 返回顶部 返回列表