1. zip生成
/** * @param sourceFilePath :待压缩的文件路径 文件的目录,并非文件路径 * @param zipFilePath :压缩后存放路径 * @param fileName :压缩后文件的名称 不要传.zip名称 * @return */ public static boolean fileToZip(String sourceFilePath, String zipFilePath, String fileName) { boolean flag = false; File sourceFile = new File(sourceFilePath); FileInputStream fis = null; BufferedInputStream bis = null; FileOutputStream fos = null; ZipOutputStream zos = null; if (sourceFile.exists() == false) { System.out.println("待压缩的文件目录:" + sourceFilePath + "不存在."); sourceFile.mkdir(); // 新建目录 } try { File zipFile = new File(zipFilePath + "/" + fileName + ".zip"); if (zipFile.exists()) { System.out.println(zipFilePath + "目录下存在名字为:" + fileName + ".zip" + "打包文件."); } else { File[] sourceFiles = sourceFile.listFiles(); if (null == sourceFiles || sourceFiles.length < 1) { System.out.println("待压缩的文件目录:" + sourceFilePath + "里面不存在文件,无需压缩."); } else { fos = new FileOutputStream(zipFile); zos = new ZipOutputStream(new BufferedOutputStream(fos)); byte[] bufs = new byte[1024 * 10]; for (int i = 0; i < sourceFiles.length; i++) { //创建ZIP实体,并添加进压缩包 ZipEntry zipEntry = new ZipEntry(sourceFiles[i].getName()); zos.putNextEntry(zipEntry); //读取待压缩的文件并写进压缩包里 fis = new FileInputStream(sourceFiles[i]); bis = new BufferedInputStream(fis, 1024 * 10); int read = 0; while ((read = bis.read(bufs, 0, 1024 * 10)) != -1) { zos.write(bufs, 0, read); } } flag = true; } } } catch (FileNotFoundException e) { e.printStackTrace(); throw new RuntimeException(e); } catch (IOException e) { e.printStackTrace(); throw new RuntimeException(e); } finally { //关闭流 try { if (null != bis) bis.close(); if (null != zos) zos.close(); } catch (IOException e) { e.printStackTrace(); throw new RuntimeException(e); } } return flag; }
调用
// 获取文件的 上一级目录 ZipUtil.fileToZip(parentFile.getPath(), parentFile.getPath(), fd_name);
2. 下载zip文件
DownloadFile.downloadFile(downFile, fd_name, response, true);
public static void downloadFile(File file,String newNameTo,HttpServletResponse response,boolean isDelete) { try { // 以流的形式下载文件。 System.out.println("导出的路径:"+file.getPath()); BufferedInputStream fis = new BufferedInputStream(new FileInputStream(file.getPath())); byte[] buffer = new byte[fis.available()]; fis.read(buffer); fis.close(); // 清空response response.reset(); OutputStream toClient = new BufferedOutputStream(response.getOutputStream()); response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(newNameTo, "UTF-8")); toClient.write(buffer); toClient.flush(); toClient.close(); if(isDelete){ file.delete(); //是否将生成的服务器端文件删除 } } catch (IOException ex) { ex.printStackTrace(); } }
标签:fis,zip,文件,生成,new,null,response,下载 From: https://www.cnblogs.com/qukaige/p/17188059.html