龙猫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 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler