文件批量下载 博客分类: javaFile 批量下载生产zip文件下载
程序员文章站
2024-03-25 19:04:34
...
java下载多个文件,可以先把多个文件打包压缩成 zip 文件,然后下载zip文件
代码如下:
/** * 生成zip * @param sourcePath 原文件夹路径 * @param zipPath 生成的zip路径 */ public static void createZip(String sourcePath, String zipPath) { FileOutputStream fos = null; ZipOutputStream zos = null; try { fos = new FileOutputStream(zipPath); zos = new ZipOutputStream(fos); writeZip(new File(sourcePath), "", zos); } catch (FileNotFoundException e) { e.printStackTrace(); } finally { try { if (zos != null) { zos.close(); } } catch (IOException e) { e.printStackTrace(); } } } private static void writeZip(File file, String parentPath, ZipOutputStream zos) { if(file.exists()){ if(file.isDirectory()){//处理文件夹 parentPath+=file.getName()+File.separator; File [] files=file.listFiles(); for(File f:files){ writeZip(f, parentPath, zos); } }else{ FileInputStream fis=null; DataInputStream dis=null; try { fis=new FileInputStream(file); dis=new DataInputStream(new BufferedInputStream(fis)); ZipEntry ze = new ZipEntry(parentPath + file.getName()); zos.putNextEntry(ze); zos.setEncoding("GBK"); byte [] content=new byte[1024]; int len; while((len=fis.read(content))!=-1){ zos.write(content,0,len); zos.flush(); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ try { if(dis!=null){ dis.close(); } }catch(IOException e){ e.printStackTrace(); } } } } }
调用方法:
.createZip(FilePath+fileNameAll, FilePath+fileNameAll+".zip");
接下来就是下载:
/** * 下载公共方法 * @param response * @param str 下载的文件名 */ private void downFile(HttpServletResponse response, HttpServletRequest request,String str) { try { String FilePath = request.getSession().getServletContext().getRealPath(File.separator); String path = FilePath + str; File file = new File(path); if (file.exists()) { InputStream ins = new FileInputStream(path); BufferedInputStream bins = new BufferedInputStream(ins);// 放到缓冲流里面 OutputStream outs = response.getOutputStream();// 获取文件输出IO流 BufferedOutputStream bouts = new BufferedOutputStream(outs); response.setContentType("application/x-download");// 设置response内容的类型 response.setHeader( "Content-disposition", "attachment;filename=" + URLEncoder.encode(str, "UTF-8"));// 设置头部信息 int bytesRead = 0; byte[] buffer = new byte[8192]; // 开始向网络传输文件流 while ((bytesRead = bins.read(buffer, 0, 8192)) != -1) { bouts.write(buffer, 0, bytesRead); } bouts.flush();// 这里一定要调用flush()方法 ins.close(); bins.close(); outs.close(); bouts.close(); } else { } } catch (IOException e) { } }
上一篇: install ORB_SLAM2 for rtabmap
下一篇: param() 转js
推荐阅读
-
文件批量下载 博客分类: javaFile 批量下载生产zip文件下载
-
Java动态zip下载,IE8无法打开的问题(不可预料的压缩文件末端) 博客分类: HTTP zipie8contenttype
-
nginx服务器在IE下载时,apk文件变成zip的解决方法(转) 博客分类: androidnginx
-
gradlew wrapper使用下载到本地的gradle.zip文件安装。 博客分类: java基础android
-
gradlew wrapper使用下载到本地的gradle.zip文件安装。 博客分类: java基础android
-
下载android应用的apk文件变成了zip--网上转载的解决方案 博客分类: android apkzip下载android