`
chennaid2
  • 浏览: 52444 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
  • b_l_east: 在主动模式下,如果有多个客户端,服务器对每一个客户端均使用20 ...
    ftp

java 将文件打包,并下载的工具类

阅读更多

package com.dvnchina.itv.cps.utils.compress;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.List;

import org.apache.tools.zip.ZipEntry;
import org.apache.tools.zip.ZipOutputStream;

/**
 * 压缩文件类,支持添加文件或文件夹
 *
 * @author Teddy
 *
 */
public class ZipUtil {

 

//文件打包下载
    public static HttpServletResponse downLoadFiles(List<File> files,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        try {
            /**这个集合就是你想要打包的所有文件,
             * 这里假设已经准备好了所要打包的文件*/
            //List<File> files = new ArrayList<File>();
    
            /**创建一个临时压缩文件,
             * 我们会把文件流全部注入到这个文件中
             * 这里的文件你可以自定义是.rar还是.zip*/
            File file = new File("c:/certpics.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();
        }
    }

}

1
0
分享到:
评论

相关推荐

    java压缩文件工具类

    将文件打包成压缩文件,以及对压缩包的解压,方便好用。

    java 中 zip压缩文件解压工具类

    我们将讨论核心的Java API,如`java.util.zip`包中的类,并通过一个名为`CompressFileUtils`的工具类来展示如何实现文件的解压缩功能。 首先,`java.util.zip`包提供了几个关键类,用于处理各种压缩格式,如`...

    java文件打包下载

    当我们需要将项目分发或共享给他人时,通常会将相关的Java文件打包成压缩文件,便于传输和下载。本篇将围绕“Java文件打包下载”这一主题,深入探讨相关知识点。 首先,我们要了解如何在Java中进行文件操作。Java...

    java常用工具类打包下载

    J2EE常用工具类汇总 J2EE常用工具类—Value Object工具类 ...J2EE常用工具类—文件打包解包处理类 J2EE常用工具类——文件操作类 J2EE常用工具类——邮件处理类(javaMail发送邮件) J2EE常用工具类——字符串工具类

    FileUploadUtil.java(文件上传工具类)

    文件上传工具类,上传文件,上传导入文件到path文件夹下,判断图片大小是否...将存放在sourceFilePath目录下的源文件,打包成fileName名称的zip文件,并存放到zipFilePath路径下 ,拷贝指定文件到另一文件中,保存图片

    java先压缩再下载工具类

    "java先压缩再下载工具类"是一个实用的工具集,它允许开发者将一组文件打包成ZIP格式,然后提供给用户下载。这个工具类包括了核心的压缩功能以及输入/输出操作,使得在Java应用程序中执行这样的任务变得更加便捷。 ...

    exe4 把JAVA文件打包成EXE工具

    标题提到的"exe4 把JAVA文件打包成EXE工具"是一种能够帮助开发者将Java项目转换为Windows平台下的可执行文件(.exe)的工具,它使得非Java环境的用户也能方便地运行Java应用程序。 **Java到EXE转换的原理:** Java...

    java文件打包

    Java文件打包是一个重要的过程,它将Java源代码及其相关资源组织成一个可执行的格式,以便用户能够方便地运行和分发。这个过程通常涉及到多个步骤,包括编译、构建和打包。以下是对这个主题的详细说明: 1. **Java...

    java文件打包例子

    ### Java文件打包知识点详解 在Java开发过程中,经常会遇到需要将多个类文件、资源文件等进行打包处理的情况,以便于程序的部署与分发。本文将详细介绍如何通过命令行方式来实现Java文件的打包,并结合具体的示例...

    java中将多个excel打包成zip文件下载.rar

    在Java编程环境中,将多个Excel文件打包成ZIP文件并实现下载功能是一项常见的需求,尤其是在数据导出或批量处理场景中。下面将详细讲解这个过程涉及的主要知识点。 首先,我们需要了解Java中的`java.util.zip`包,...

    JAVA打包EXE的工具

    为了解决这个问题,开发者可以使用特定的工具将JAR文件打包成可执行的Windows EXE文件,使得非Java环境的用户也能方便地运行程序。"JAVA打包EXE的工具"就是为此目的设计的。 "JAR TO EXE"是一个典型的例子,它允许...

    文件夹打包成压缩包工具类:PackToZipUtils.java

    packFileToZip可以将指定目录(tempFileDir)下的所有文件打包成指定zipName的压缩包,保存在tempZipDir中,然后再通过response获取流响应给前端,其中有使用到IOutil工具类,用于将文件通过流写入磁盘,请自行修改...

    JAVA代码打包工具

    Java代码打包工具是开发者在开发过程中经常会用到的一种实用软件,它可以帮助我们将编写好的Java程序集合成可执行的文件,方便部署和分发。这里我们主要讨论的是Java应用程序的打包过程,包括JAR(Java Archive)...

    java利用oss实现下载功能

    WriteLeadsOssUtils类是一个工具类,用于实现下载功能。该类中有一个私有构造函数,用于防止多线程并发bug,并使用AtomicLong来记录下载次数。writeJSONObjectFile方法用于将内容写入OSS,然后将下载链接返回给前端...

    java打包工具打包成exe文件

    在Java领域,有几个知名的打包工具可以将Java程序转换为EXE文件,其中包括Launch4j、JSmooth、Jar2Exe和Excelsior JET等。这些工具不仅能够生成EXE,还允许我们自定义各种参数,比如设置程序图标,控制启动选项,...

    java 打包可执行文件

    在Java编程中,将代码打包成可执行文件是常见的需求,尤其在分发软件或部署应用程序时。这个过程通常涉及到JAR(Java Archive)文件的创建,它是一种用于收集多个类文件、相关的元数据和资源文件的容器。下面将详细...

    Java打包成可执行文件步骤详解

    - 使用`jar cvfm jartest.jar test.txt`命令将所有文件打包进`jartest.jar`文件中。这里的`c`表示创建新的jar文件;`v`表示详细模式,显示添加到jar文件中的每个文件;`f`表示指定jar文件的名字;`m`表示使用指定的...

    Java程序打包成exe执行文件工具

    通过使用Java的jar命令或者集成开发环境(IDE)如IntelliJ IDEA或Eclipse的内置功能,可以将源代码编译后的.class文件和相关的资源文件打包成JAR包。JAR包本身并不能直接在Windows上作为可执行文件运行,但可以通过...

    java swing补丁工具,打包class文件,jsp,html,js,css,xml,jar等文件,同时也支持其他格式的文件打包

    分享自己做的的打包工具,希望能帮助到平时为一堆补丁文件class(自动包含class内部类),jsp,html,js,css,xml,jar等文件花费很长时间整理的朋友,有了我这个工具,似乎这一切都变得简单,你只需要选择路径,然后在...

    将Java项目打包成可执行文件

    将Java项目打包成可执行文件是一项常见的需求,尤其是在部署应用程序到非开发环境时。通过将Java项目转换为可执行文件(.exe),可以方便地在Windows操作系统上运行,无需用户安装Java运行环境(JRE)。本文将详细...

Global site tag (gtag.js) - Google Analytics