我用java测试解压缩文件,以下是我的代码:
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;public class TestUnZip {
public static void UnZipFiles(java.io.File zipfile, String descDir) {
try {
// Open the ZIP file
ZipFile zf = new ZipFile(zipfile);
for (Enumeration entries = zf.entries(); entries.hasMoreElements();) {
// Get the entry name
ZipEntry entry = ((ZipEntry) entries.nextElement());
String zipEntryName = entry.getName();
InputStream in = zf.getInputStream(entry);
// System.out.println(zipEntryName);
OutputStream out = new FileOutputStream(descDir + zipEntryName);
byte[] buf1 = new byte[1024];
int len;
while ((len = in.read(buf1)) > 0) {
out.write(buf1, 0, len);
}
// Close the file and stream
in.close();
out.close();
}
} catch (IOException e) {
e.printStackTrace();
}
} /**
 * @param args
 */
public static void main(String[] args) {

  TestUnZip tuz = new TestUnZip(); 
  File file = new File("D:\\test.rar"); 
  tuz.UnZipFiles(file, file.getParent());
 
}
}错误信息是:
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:204)
at java.util.zip.ZipFile.<init>(ZipFile.java:235)
at com.home.test.TestUnZip.UnZipFiles(TestUnZip.java:16)
at com.home.test.TestUnZip.main(TestUnZip.java:45)被搞了半天,希望有人帮我解答,谢谢!

解决方案 »

  1.   

    没做过zip 或者 unzip 的东东,可能是文件的问题,你是用 zip 压缩的文件吗?
      

  2.   

    rar的格式貌似和zip不一样吧?你解压缩一个jar文件试试看
      

  3.   

    我用上述方法尝试解压缩rar和zip类型的文件,都不成功!
    我解压jar文件会报一个新错:
    java.io.FileNotFoundException: C:\gem.jar\META-INF\MANIFEST.MF (系统找不到指定的路径。)
    at java.io.FileOutputStream.open(Native Method)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:179)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:131)
    at com.home.test.UpZip.unzip(UpZip.java:34)
    at com.home.test.UpZip.main(UpZip.java:55)
      

  4.   

    我刚才修改了下,可以解压缩jar类型的压缩文件,但怎么解压缩zip或rar类型的文件,继续问?
      

  5.   

    不好意思说错了,是可以解压缩jar和zip文件,但好像不能解压缩rar文件。
      

  6.   

    给你参考下我最初的雏形代码,可能不是最优的,自己再改改吧---自己写的,不一定适合你
    说明一下:为方便使用暴露了两个public接口
    package test.zip;import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.util.zip.ZipEntry;
    import java.util.zip.ZipInputStream;
    import java.util.zip.ZipOutputStream;public class Zipper{
    public static void zip(String fileDir, String zipName) throws Exception{
    File folder = new File(fileDir);
    ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipName));
    zip(folder, zos, "");
    zos.close();
    }
    private static void zip(File file, ZipOutputStream zos, String dir) throws Exception {
    if(file.isDirectory()){
    File[] folder = file.listFiles();
    dir = dir + (dir.length() > 0 ? "" : "/") + file.getName();
    zos.putNextEntry(new ZipEntry(dir + "/"));
    for(File child : folder){
    zip(child, zos, dir);
    }
    }else{
    byte[] data = new byte[1024];
    FileInputStream fis = new FileInputStream(file);
    dir = dir + (dir.length() > 0 ? "" : "/") + file.getName();
    ZipEntry entry = new ZipEntry(dir);
    zos.putNextEntry(entry);
    int count;
    while((count = fis.read(data, 0, 1024)) != -1){
    zos.write(data, 0, count);
    }
    fis.close();
    }
    }
    public static void unZip(String zipDir,String unZipDir) throws Exception{
    ZipInputStream zis = new ZipInputStream(new FileInputStream(zipDir));
    ZipEntry entry = zis.getNextEntry();
    File file = new File(unZipDir);
    file.mkdir();
    while(entry != null){
    if(entry.isDirectory()){
    String name = entry.getName();
    file = new File(unZipDir + "/" + name);
    file.mkdir();
    }else{
    file = new File(unZipDir + "/" + entry.getName());
    file.createNewFile();
    FileOutputStream fos = new FileOutputStream(file);
    int count;
    while((count = zis.read()) != -1){
    fos.write(count);
    }
    fos.close();
    }
    entry = zis.getNextEntry();
    }
    zis.close();
    }
    }
      

  7.   

    解压zip我用的是apache的包,没出什么问题
      

  8.   

    Java默认不支持Rar的解压的,可以在http://sourceforge.net/projects/java-unrar/下载一个来用
      

  9.   

    Package java.util.zip
    Provides classes for reading and writing the standard ZIP and GZIP file formats. Rar格式不是标准的zip格式吧?
      

  10.   

    你的zip文件是不是路径传的不对,
      

  11.   

    rar 与 zip不同~!
    jar 也是有zlib方式压缩的, 和zip一样的。紧紧是后缀不一样。
      

  12.   


    你要是能用java包解了rar
    那winrar还混傻
    winrar能解zip/jar
    是因为他们的算法都公开了
      

  13.   

    http://sourceforge.net/projects/java-unrar 就可以用Java解开Rar文件!这个只要有人能够分析出结构,有什么不可以做的!
      

  14.   

    用java打包一个zip在去解压这个zip看会不会出问题
      

  15.   

    很明显的一个错误,错误已经说明解压的格式不正确。你要解压的应该是个zip.如何解压zip用下面这个程序
    public class RarToFile {   
       /* 
        * cmd 解压缩命令 
        */ 
       
        private static String unrarCmd = "C:\\Program Files\\WinRAR\\unrar.exe x ";         /** 
        * 将1个RAR文件解压 
        * rarFileName 需要解压的RAR文件(必须包含路径信息以及后缀) 
        * destDir 解压后的文件放置目录 
        */ 
        public static void unRARFile(String rarFileName, String destDir) {   
           unrarCmd +=" "+ rarFileName + " " + destDir;   
           try {   
               Runtime rt = Runtime.getRuntime();   
               Process p = rt.exec(unrarCmd);
               //p.destroy();
           } catch (Exception e) {   
               System.out.println(e.getMessage());      
           }   
        } 
        public static void main(String arg[]){
        RarToFile r=new RarToFile();
        r.unRARFile("d:\\1.rar", "d:\\");
        
        }}