龙猫12138 2017-05-09 01:45 采纳率: 0%
浏览 6091

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条回答 默认 最新

  • yizishou 2017-05-09 02:09
    关注

    注意你的这一句代码:

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

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

    评论

报告相同问题?

悬赏问题

  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作