问题出现
问题来源是我做的一个文件导出功能 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;}}