前言
一些用户需要将服务器上的文件打包成压缩包的方式导出到本地。会存在多个文件压缩至一个包中;
目录
前言
一、ZipOutPutStream
二、案例
1.创建压缩包
2.写入数据
总结
一、ZipOutPutStream
zipoutputStream是fileOutputStream中的一种,它可以将内容直接写入到zip包中。一般创建zipoutputStream通常是封装一个FileOutputStream,然后在每写入一个文件之前,需要先调用一次putNextEntry,然后使用write写入byte[]类型的数据,当写入完毕的时候使用colseEntry来结束这个文件的打包;
二、案例 1.创建压缩包
代码如下:
@GetMapping("/backUp") public void backUp(HttpServletRequest request, HttpServletResponse response) { // 创建输出流以及待下载的文件名称 response.reset(); response.setCharacterEncoding("utf-8"); response.setContentType("multipart/form-data"); response.setHeader("Content-disposition", "attachment;filename=" + ZIPNAME + SUFFIX); // 创建流对象 try ( ZipOutputStream zipOutputStream = new ZipOutputStream(response.getOutputStream()); DataOutputStream os = new DataOutputStream(zipOutputStream); ) { zipOutputStream.setMethod(ZipOutputStream.DEFLATED); // 将压缩包中添加待下载文件 pushDoc(zipOutputStream, os); // 刷新流 os.flush(); os.close(); } catch (Exception e) { log.error("backUp {}", e); e.printStackTrace(); } }2.写入数据
代码如下:
private void writeTPrMeeting(ZipOutputStream zipOutputStream, DataOutputStream os, String jsonString, String docName, String suffix) { File file = null; // 压缩包待生成文件 String zipPath = docName + suffix; // 临时文件 String tempPath = docName + TEMP + suffix; try { // 在压缩包下创建文件 zipOutputStream.putNextEntry(new ZipEntry(zipPath)); BufferedWriter bw; // 生成临时文件 bw = new BufferedWriter(new FileWriter(tempPath)); bw.write(jsonString); bw.close(); file = new File(tempPath); FileInputStream fis = null; fis = new FileInputStream(file); int len; byte[] b = new byte[1024]; // 在刚刚创建文件中写入数据 while ((len = fis.read(b)) != -1) { os.write(b, 0, len); } fis.close(); } catch (Exception e) { e.printStackTrace(); } finally { if (file != null && file.exists()) { file.delete(); } } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)