java创建的zip无法打开或打开显示不可预料的压缩文件

问题出现

问题来源是我做的一个文件导出功能 java创建zip文件,结果在我的电脑上能够打开,在同事的mac或者未安装360压缩的电脑上打不开,然后我就分析应该是代码创建的这个文件有问题,可能360压缩做了某种处理,其他没做处理的打不开。

问题如下
在这里插入图片描述

在这里插入图片描述
先贴结论

1.检查程序输出流是否关闭
2.流的关闭顺序是否正确

问题代码

这里有两个问题
1.先开的流应该后关
2.流要在调用它之前的地方进行关闭,我是调用了 byteOutputStream.toByteArray(); 之后才关闭,所以会有问题
在这里插入图片描述

问题解决
1.把流的关闭顺序调整,然后关闭的位置放在调用它之前的地方关闭
2.在调用它之前的地方先调用一下流的 finish() 方法

如图
在这里插入图片描述
还有一种方法,就是看可以后关,但是在其他调用的地方之前调用finish()

在这里插入图片描述

问题原因
其实就是流在close之前会调用一下finish方法,把缓存的数据给刷新一下,所以上面 byteOutputStream.toByteArray(); 这行代码的数据其实是不完整的,这就是导致问题的关键。

public void close() throws IOException {
        if (!closed) {
            super.close();
            closed = true;
        }
    }

public void close() throws IOException {
        if (!closed) {
            finish();
            if (usesDefaultDeflater)
                def.end();
            out.close();
            closed = true;
        }
    }
  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值