java 里面写了一个zip压缩的代码,但是出来的zip压缩包打不开(没有内容),代码如下

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class ZipFileTest
{
static final int BUFFER = 2048 ;
public File zipDir (File mydir)
{

    BufferedInputStream bis = null ;
    File zipFile = new File (mydir.getParent()+"/"+mydir.getName()+".rar") ;
    ZipOutputStream out = null ;
    try 
    {
        out = new ZipOutputStream (new BufferedOutputStream (new FileOutputStream (zipFile) , BUFFER)) ;
        File dirCon [] = mydir.listFiles() ;
        File temp = null ;
        for(int i = 0 ; i < dirCon.length ; i ++)
        {
            temp = dirCon [i] ;
            System.out.println("压缩"+dirCon[i].getName()) ;
            bis = new BufferedInputStream (new FileInputStream (temp)) ;
            ZipEntry en = new ZipEntry (temp.getName()) ;
            out.putNextEntry(en) ;
            byte data [] = new byte [bis.available()] ;             
            out.write(bis.read(data)) ;
        }
    } 
    catch (FileNotFoundException e) 
    {
        e.printStackTrace();
    }
    catch (IOException e) 
    {
        e.printStackTrace();
    }
    finally
    {
        try 
        {
            if(bis != null)
                bis.close() ;
        } 
        catch (IOException e) 
        {
            e.printStackTrace();
        } 

    }
    return zipFile ;
}

public static void main(String[] args) 
{
    File file = new File ("d:/aaa") ;
    ZipFileTest zip = new ZipFileTest () ;
    zip.zipDir (file) ;
}

}

加一个package 包名 就可以了,不知道哪里出了错,跪求各位帮我看看 :》

3个回答

注意你的这一句代码:

out.write(bis.read(data));
```,

`bis.read(data)`的返回值是个`int`,是写入数组的字节数量,你直接把这个int写入文件去了,那肯定压缩后的文件中只会有一个字符。。

改成这样:

bis.read(data);
out.write(data);

m0_37676512
龙猫12138 回复yizishou: 谢谢解答,但是还是不行。1、我把每一个匿名对象都改成了有名字的对象,但是发现BufferedOutputStream和zipOutputStream关闭不了,会报错Stream closed;2、我也按照下面那个仁兄的话把rar改成了zip。
3 年多之前 回复
yizishou
yizishou 还有,1. 注意你最后没有关闭输出流;2. 你给每个输入文件创建了一个输入流,但是只关闭了最后一个文件的输入流。
3 年多之前 回复

你的包是rar文件,zip支持不了,需要用winrar来压缩,解压
或者你用zip的话,就需要是zip格式的压缩包来解压

read返回值是int类型的,你写入的是read返回值,不是buff中的数据

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐