java批量下载文件
2016-03-10 20:37
369 查看
直接粘贴源码使用
/** * 这个集合就是你想要打包的所有文件, 这里假设已经准备好了所要打包的文件 */ /** * 创建一个临时压缩文件, 我们会把文件流全部注入到这个文件中 这里的文件你可以自定义是.rar还是.zip */ File file = new File("e:/temp.rar"); if (!file.exists()) { file.createNewFile(); } response.reset(); // response.getWriter() // 创建文件输出流 FileOutputStream fous = new FileOutputStream(file); /** * 打包的方法我们会用到ZipOutputStream这样一个输出流, 所以这里我们把输出流转换一下 */ // org.apache.tools.zip.ZipOutputStream zipOut // = new org.apache.tools.zip.ZipOutputStream(fous); ZipOutputStream zipOut = new ZipOutputStream(fous); /** * 这个方法接受的就是一个所要打包文件的集合, 还有一个ZipOutputStream */ zipFile(files, zipOut); zipOut.close(); fous.close(); return downloadZip(file, response); } catch (Exception e) { e.printStackTrace(); } /** * 直到文件的打包已经成功了, 文件的打包过程被我封装在FileUtil.zipFile这个静态方法中, * 稍后会呈现出来,接下来的就是往客户端写数据了 */ // OutputStream out = response.getOutputStream(); return response; } /** * 把接受的全部文件打成压缩包 * * @param List * <File>; * @param org * .apache.tools.zip.ZipOutputStream */ public static void zipFile(List files, ZipOutputStream outputStream) { int size = files.size(); for (int i = 0; i < size; i++) { File file = (File) files.get(i); zipFile(file, outputStream); } } public static HttpServletResponse downloadZip(File file, HttpServletResponse response) { try { // 以流的形式下载文件。 InputStream 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=" + file.getName()); toClient.write(buffer); toClient.flush(); toClient.close(); } catch (IOException ex) { ex.printStackTrace(); } finally { try { File f = new File(file.getPath()); f.delete(); } catch (Exception e) { e.printStackTrace(); } } return response; } /** * 根据输入的文件与输出流对文件进行打包 * * @param File * @param org * .apache.tools.zip.ZipOutputStream */ public static void zipFile(File inputFile, ZipOutputStream ouputStream) { try { if (inputFile.exists()) { /** * 如果是目录的话这里是不采取操作的, 至于目录的打包正在研究中 */ if (inputFile.isFile()) { FileInputStream IN = new FileInputStream(inputFile); BufferedInputStream bins = new BufferedInputStream(IN, 512); // org.apache.tools.zip.ZipEntry ZipEntry entry = new ZipEntry(inputFile.getName()); ouputStream.putNextEntry(entry); // 向压缩文件中输出数据 int nNumber; byte[] buffer = new byte[512]; while ((nNumber = bins.read(buffer)) != -1) { ouputStream.write(buffer, 0, nNumber); } // 关闭创建的流对象 bins.close(); IN.close(); } else { try { File[] files = inputFile.listFiles(); for (int i = 0; i < files.length; i++) { zipFile(files[i], ouputStream); } } catch (Exception e) { e.printStackTrace(); } } } } catch (Exception e) { e.printStackTrace(); } }
相关文章推荐
- Java程序设计概述及环境(Java核心技术卷Ⅰ)
- java语言的I/O操作预习
- 尚学堂java基础——第13、14集笔记
- 关于SpringMvc中的事务@Transactional
- java异常处理预习
- Java NIO笔记 NIO概览
- 成为一名JAVA高级工程师你需要学什么【转】
- java提高篇-----详解java的四舍五入与保留位
- Java集合框架(四)
- Java构造方法
- java项目——java中输出当前时间的各种方法
- 安装JDK包时出现 内部错误 2350 的解决办法
- Java作业
- Java编程思想学习(十) 正则表达式
- 优秀的Java工程师需要掌握的10项技能
- Java泛型和链表
- Java并发编程:Thread类的使用
- spring mvc中的ModelAttribute与SessionAttributes
- Java中的修饰符
- Java小白手记2:一些名词解释