A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© huangxuanheng 中级黑马   /  2014-8-19 20:04  /  4580 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一下代码可以实现解压带有文件的压缩包,但如果压缩包里面含有文件夹,就无法正常解压了。大家一起来说说怎么样才能把一个具有压缩包的文件全部解压出来呢?
  1. package com.test;

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

  12. /**
  13. * 解压缩文件
  14. * @author Administrator
  15. *
  16. */
  17. public class ZipInputStreamTest {

  18.         public static void main(String[] args) throws Exception {
  19.                 // TODO 自动生成的方法存根
  20.                         File file=new File("d:"+File.separator+"test.zip");  //定义要解压的文件
  21.                        
  22.                         File output=null;
  23.                        
  24.                         ZipFile zipFile=new ZipFile(file);   //得到解压文件
  25.                         //定义解压缩输入流
  26.                         ZipInputStream zipInput=new ZipInputStream(new FileInputStream(file));
  27.                         InputStream input=null;
  28.                         OutputStream out=null;
  29.                         ZipEntry entry=null;  //定义实体类
  30.                         while((entry=zipInput.getNextEntry())!=null){
  31.                                
  32.                                
  33.                                 output=new File("d:"+File.separator+entry.getName());
  34.                                 //判断输出文件夹是否存在,如果不存在,则创建文件夹
  35.                                
  36.                                
  37.                                 if(!(output.getParentFile().exists())){
  38.                                         output.getParentFile().mkdir();
  39.                                 }
  40.                                 //判断输出文件是否存在,如果不存在,则创建该文件
  41.                                 if(!(output.exists())){
  42.                                         output.createNewFile();
  43.                                 }
  44.                                 input=zipFile.getInputStream(entry);
  45.                                 out=new FileOutputStream(output);
  46.                                 int b=0;
  47.                                 while((b=input.read())!=-1){
  48.                                         out.write(b);
  49.                                 }
  50.                                 input.close();
  51.                                 out.close();
  52.                         }
  53.                        
  54.                        

  55.         }

  56. }
复制代码

5 个回复

倒序浏览
本帖最后由 fantacyleo 于 2014-8-19 21:54 编辑

如果压缩包中的某个文件夹非空时,ZipEntry只代表文件,不代表文件夹。你调用ZipEntry的toString方法就知道了。ZipEntry是自带路径的,只需要拿toString输出的字符串去构建File和FileOutputStream就可以了。
回复 使用道具 举报
能  目测是在做技术分的题目  今天刚刚做完 正在完善异常处理
回复 使用道具 举报
fantacyleo 发表于 2014-8-19 21:48
如果压缩包中的某个文件夹非空时,ZipEntry只代表文件,不代表文件夹。你调用ZipEntry的toString方法就知道 ...

按照你 的方法在尝试
回复 使用道具 举报
小乖乖灬浩歌 发表于 2014-8-19 22:26
能  目测是在做技术分的题目  今天刚刚做完 正在完善异常处理

能,应该怎么样呢?可以给个例子参考吗?
回复 使用道具 举报
huangxuanheng 发表于 2014-8-20 10:39
能,应该怎么样呢?可以给个例子参考吗?

可以  下次直接联系企鹅吧  这个不一定实时在线  12SEVEN5FIVE4NINE396
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马