将指定ZIP文件解压到指定文件夹中的程序
但是运行后出错。一直没找到错误的原因。(我比较笨)import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;public class Unzip
{
    public void zipExtracting(String filePath, String zipFile)
    {
        int BUFFER = 1024;
        BufferedOutputStream dest = null;
        BufferedInputStream is = null;
        ZipEntry entry = null;
        ZipFile zipfile = null;
        Enumeration enu = null;
        try
        {
            zipfile = new ZipFile(zipFile);
            enu = zipfile.entries();
            while (enu.hasMoreElements())
            {
                entry = (ZipEntry) enu.nextElement();
                
                if (entry.isDirectory())
                {
                    new File(filePath + entry.getName()).mkdirs();
                    continue;
                }
                is = new BufferedInputStream(zipfile.getInputStream(entry));
                int count;
                byte data[] = new byte[BUFFER];
                FileOutputStream fos = new FileOutputStream(filePath + entry.getName());              
                dest = new BufferedOutputStream(fos, BUFFER);
                while ((count = is.read(data, 0, BUFFER)) != -1)
                {
                    dest.write(data, 0, count);
                }
                dest.flush();
                dest.close();
                is.close();
            }
        } catch (Exception e)
        {
            e.printStackTrace();
        }finally
        {
            try
            {
                if (dest != null)
                {
                    dest.flush();
                    dest.close();
                }
                if (is != null)
                {
                    is.close();
                }
            } catch (Exception e)
            {
                e.printStackTrace();
            }
        }
    }
    public static void main(String args[]){
     Unzip uu=new Unzip();
     uu.zipExtracting("d:"+File.separator+"123456"+File.separator, "d:"+File.separator+"123.zip");
    
    }
}
错误信息:
java.util.zip.ZipException: error in opening zip file
at java.util.zip.ZipFile.open(Native Method)
at java.util.zip.ZipFile.<init>(ZipFile.java:203)
at java.util.zip.ZipFile.<init>(ZipFile.java:84)
at BatchUploadExtracting.zipExtracting(BatchUploadExtracting.java:21)
at BatchUploadExtracting.main(BatchUploadExtracting.java:70)

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【chaicg】截止到2008-06-22 23:59:54的历史汇总数据(不包括此帖):
    发帖数:2                  发帖分:40                 
    结贴数:2                  结贴分:40                 
    未结数:0                  未结分:0                  
    结贴率:100.00%            结分率:100.00%            
    敬礼!
      

  2.   

    补充下 我是把D盘的123.zip中文件解压到文件夹D:\123456下面去。
      

  3.   

    uu.zipExtracting("d:"+File.separator+"123456"+File.separator, "d:"+File.separator+"123.zip"); 
    这个方法是不是还有别的参数,进行设置呢?
    我没有用过.
      

  4.   

    先创建 123456这个文件夹
    在zipExtracting方法里加入
    new File(filePath).mkdir();
      

  5.   

    开始的时候123.zip里压缩的是“新建文本文档.txt”运行程序后发现报错,说is是关闭的,到123456/下边去看
    出现了一个乱码名字的TXT文件。
    然后把123.txt添加到123.zip里边程序正常执行,所以我觉得是中文问题造成的
      

  6.   

    public static void main(String args[]){ 
        Unzip uu=new Unzip(); 
        uu.zipExtracting("d:"+File.separator+"123456"+File.separator, "d:"+File.separator+"123.zip");     
        } 

    =========================================
    红色这行有问题。你把它改写成类似这样,试一下
    ("d:\\"+File.separator+"123456"+File.separator, "d:\\"+File.separator+"123.zip"); 或
    ("d:\"+File.separator+"123456"+File.separator, "d:\"+File.separator+"123.zip"); 
      

  7.   

    我分析你的错误可能出现在
    if (entry.isDirectory()) 

        new File(filePath + entry.getName()).mkdirs(); 
        continue; 

    这里看着似乎是创建目录了.但是如果在ZIP文件的根目录中就有文件.这时候又恰恰
    取到的这个文件.那么entry.isDirectory()就不满足.所以写的时候就出错啦.
    所以应该在你循环ZIP的ENTRY前就应该创建这个目录 .
      

  8.   

    谢谢各位。问题解决了 问题在。我创建ZIP文件的时候出的错。我为了图省事直接把.rar文件直接改成.zip文件了。在API里有个 检查压缩码。。估计是那个出的问题