1:使用360压缩包打开
2:使用winRAR打开后点击修复功能即可修复
3:代码问题()
首先判断你的流是否都成功关闭了,若有一个流未关闭都会导致标题所诉问题
都关闭后则要看流的关闭顺序
// 以流的形式下载文件 BufferedInputStream fis = null; BufferedOutputStream toClient = null; try { fis = new BufferedInputStream(new FileInputStream(file.getPath())); byte[] buffer = new byte[fis.available()]; String name = file.getName(); fis.read(buffer); // 清空response response.reset(); toClient = new BufferedOutputStream(response.getOutputStream()); name = URLUtil.encode(name,Charset.defaultCharset()); response.setCharacterEncoding("UTF-8"); response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment;filename=" + name); response.setHeader("download-filename",name); response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Headers", "x-requested-with"); toClient.write(buffer); toClient.flush(); } catch (IOException e) { throw new RuntimeException(e); }finally { try { if (fis != null) { System.out.println("fis关闭了"); fis.close(); } if (toClient != null) { System.out.println("toClient关闭了"); toClient.close(); } } catch (IOException e) { throw new RuntimeException(e); } }
可以看见fis在调用完read方法后,后面就不会在执行了,然后就说toClient流的执行,所以要先关闭fis,然后再关闭toClient,若先关闭toClient后关闭fis就会导致文件无法压缩的问题