`
jiangzhong
  • 浏览: 15636 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
文章分类
社区版块
存档分类
最新评论

java实现文件zip压缩 然后下载

阅读更多

前几天因为项目需要 做了一个导出 是在Oracle中blob字段导出数据生成word 然后再下载到客户端

blob为一个特殊字段 可以保存4G的数据 包括图片、视频等

/**
* @功能信息 :导出Word文档
* @参数信息 :outfile:文件路径,id:文档编号
* @返回值信息 :
* @异常信息 :
*/
public boolean readDoc(String outfile, String id) throws Exception {
   DbaObj = new DBstep.iDBManager2000(); // 创建数据库对象
   FileOutputStream fos = null;
   InputStream is = null;
   boolean mResult = false;

   String Sql = "SELECT FileBody,FileSize FROM info_document_file WHERE RecordID='"
     + id + "'";
   try {
    if (DbaObj.OpenConnection()) {
     try {
      ResultSet result = DbaObj.ExecuteQuery(Sql);
      if (result.next()) {
       try {
        int fileSize = result.getInt("FileSize");
        Blob blob = result.getBlob("FileBody");
        file = new File(outfile);

        if (!file.exists()) {
         file.createNewFile();// 如果文件不存在,则创建
        }

        fos = new FileOutputStream(file);
        is = blob.getBinaryStream();// 读出数据后转换为二进制流
        byte[] data = new byte[fileSize];
        int size = 0;

        while ((size = is.read(data)) != -1) {
         fos.write(data, 0, size);
        }

       } catch (Exception ex) {
        ex.printStackTrace();
       }
      }
      result.close();
      mResult = true;
     } catch (SQLException e) {
      e.printStackTrace();
      mResult = false;
     }
    }
   } finally {
    DbaObj.CloseConnection();
    fos.close();
    is.close();
   }
   return (mResult);
}

注:因为用到了第三方控件 所以这块未使用Hibernate 以后有时间 可以进行修改

/**
* 导出功能
*
* @param mapping
* @param form
* @param request
* @param response
* @return
* @throws Exception
*/
public ActionForward export(ActionMapping mapping, ActionForm form,
    HttpServletRequest request, HttpServletResponse response)
    throws Exception {
   List list = new ArrayList();
   // 生成随机文件名
   java.text.SimpleDateFormat format = new java.text.SimpleDateFormat("yyyymmddhhmmss");
   String result = format.format(new java.util.Date());

   ReportForm report = (ReportForm) form;
   String[] exportlist = report.getIds();

   //String str = "导出失败";
   String path = request.getRealPath("/") + "upload/";

   for (int i = 0; i < exportlist.length; i++) {
    if (readDoc(path + exportlist[i] + ".doc", exportlist[i])) {
     //str = "导出成功";
     list.add(exportlist[i] + ".doc");
     // download("http://localhost:8080/infoOA/upload/"+exportlist[i]+".doc",exportlist[i]+".doc");
    }
   }
   // 先生成zip为文件 再删除doc文件
   getZip(list, path, result);
  
   for (int i = 0; i < exportlist.length; i++) {
    deleteFile(new File(path+exportlist[i] + ".doc"));
   }
  
   downLoad(result, path, response);
   //删除zip文件
   deleteFile(new File(path+result+ ".zip"));
        //request.setAttribute("message", str);
   return null;
}

 

/**
* 压缩文件zip
* @功能信息 :
* @参数信息 :
* @返回值信息 :
* @异常信息 :
*/
public void getZip(List list,String path,String fileName) throws Exception{
    byte[] buffer = new byte[1024];
   
   String strZipName = fileName + ".zip";
   ZipOutputStream out = new ZipOutputStream(new FileOutputStream(path
                                     + strZipName));
   for (int j = 0; j < list.size(); j++) {
    String name = list.get(j).toString();
    FileInputStream fis = new FileInputStream(path + name);
    out.putNextEntry(new ZipEntry(name));
    int len;
    while ((len = fis.read(buffer)) > 0) {
     out.write(buffer, 0, len);
    }
    out.closeEntry();
    fis.close();
   }
   out.close();
   System.out.println("生成Demo.zip成功");  
   }

/**
   * 文件下载
   *
   * @功能信息 :
   * @参数信息 :
   * @返回值信息 :
   * @异常信息 :
   */
public void downLoad(String fileName,String path, HttpServletResponse response) throws IOException {
   String strZipName = fileName + ".zip";
   BufferedInputStream bis = null;
   BufferedOutputStream bos = null;
   OutputStream os = null;
   InputStream is = null;
   try {
    File file = new File(path + strZipName);
    if (!file.exists()) {
     System.out.println("文件不存在");
    }

    is = new FileInputStream(file);
    bis = new BufferedInputStream(is);
    os = response.getOutputStream();
    bos = new BufferedOutputStream(os);

    response.setHeader("Pragma", "No-cache");
    response.setHeader("Cache-Control", "no-cache");
    response.setDateHeader("Expires", 0);
    response.setContentType("application/x-msdownload;charset=utf-8");
    response.setHeader("Content-disposition", "attachment;filename="
               + URLEncoder.encode(strZipName, "utf-8"));
   
    int bytesRead = 0;
    byte[] buffer = new byte[8192];
    while ((bytesRead = bis.read(buffer, 0, 8192)) != -1) {
     bos.write(buffer, 0, bytesRead);
    }

    bos.flush();
    is.close();
    bis.close();
    os.close();
    bos.close();
   } catch (Exception e) {
    e.printStackTrace();
   }
   }

   /**
   * 删除文件信息 根据boolean类型判断文件是否存在
   *
   * @param file
   */

    private boolean deleteFile(File file) {
     if (file.exists()) {
    if (file.isFile()) {
     file.delete();
    } else if (file.isDirectory()) {
     File files[] = file.listFiles();
     for (int i = 0; i < files.length; i++) {
      this.deleteFile(files[i]);
     }
    }
    file.delete();
    return true;
   } else {
    return false;
   }
}

 

分享到:
评论

相关推荐

    java多文件压缩成zip文件并实现下载

    在Java编程中,将多个文件压缩成一个ZIP文件并实现下载是一个常见的任务,尤其是在处理大量数据或文件分发时。这个过程涉及到Java的I/O流、压缩和HTTP响应的使用。下面将详细介绍如何实现这个功能。 首先,我们需要...

    java后台批量下载文件并压缩成zip下载的方法

    在Java后台中,批量下载文件压缩成zip下载可以使用Java的文件输入输出流和zip压缩流来实现。首先,需要在Servlet中获取文件列表,然后使用循环将文件一个个添加到zip文件中,最后下载zip文件到本地桌面。 java批量...

    Java把文件压缩成zip

    本文主要介绍如何使用Java实现文件的ZIP压缩功能,并提供了完整的代码示例。通过学习本文,你可以掌握以下几个知识点: 1. 使用`java.util.zip`包中的类进行文件压缩。 2. 如何创建ZIP输出流并写入文件数据。 3. ...

    (JAVA)利用Java实现zip压缩.解压缩.rar_decompress rar java_zip 压缩

    在Java编程语言中,我们...总的来说,Java中的ZIP压缩和解压缩功能强大且易于使用,是开发人员处理文件压缩需求的首选工具。通过熟练掌握`java.util.zip`包,你可以轻松地在Java应用程序中实现文件的压缩和解压缩功能。

    java 操作Zip文件(压缩、解压、加密).zip

    Java操作Zip文件主要涉及到对文件和目录的压缩与解压缩,以及在必要时对压缩文件进行加密处理。这里我们重点讨论使用两个库:`zip4j`和`Apache Ant`来实现这些功能。 1. **zip4j库**:`zip4j-1.3.2.jar`是一个用...

    Spring Boot中使用Java实现文件批量下载与压缩功能

    通过以上步骤,我们成功地实现了一个简单的Spring Boot服务,该服务能够在接收到特定请求时将多份文件打包成ZIP压缩文件并提供给用户一次性下载。这种方式不仅极大地提升了用户体验,还简化了服务器端的处理逻辑。...

    java实现zip压缩文件

    ### Java 实现ZIP压缩文件详解 #### 一、概述 在日常开发工作中,对文件进行压缩处理是一项常见的需求。本文将详细介绍如何使用Java语言来实现文件或文件夹的ZIP格式压缩。通过本教程,读者可以了解到Java标准库...

    java解压zip压缩文件

    在Java编程环境中,解压ZIP压缩文件是一项常见的任务,它涉及到文件I/O操作以及对ZIP文件格式的理解。本文将深入探讨如何使用Java实现这一功能,同时也会提及`UnZip.java`和`UnZip2.java`这两个文件可能包含的实现...

    java实现压缩和压缩zip格式文件的功能

    以下是一份详细的介绍,讲解如何利用Java来实现ZIP文件的压缩和解压缩功能。 首先,我们要理解ZIP文件格式。ZIP是一种广泛使用的文件归档格式,它能将多个文件或目录打包成一个单一的ZIP文件,方便存储和传输。在...

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

    本文将深入探讨如何使用Java来处理ZIP文件,特别是针对标题所提及的“java 中 zip压缩文件解压工具类”。我们将讨论核心的Java API,如`java.util.zip`包中的类,并通过一个名为`CompressFileUtils`的工具类来展示...

    Java实现将多目录多层级文件打成ZIP包,以及解压ZIP包

    本文将详细讲解如何使用Java实现将多目录多层级的文件打成ZIP包,以及如何解压这些ZIP包。我们将主要关注`FileUtils.java`这个类,以及依赖的`commons-compress-1.1.jar`库。 `commons-compress-1.1.jar`是Apache ...

    JAVA文件压缩与解压缩实践,java解压缩zip文件,Java源码.zip

    在压缩和解压缩过程中,需要考虑保留文件的原始权限和属性,这可以通过设置ZipEntry的额外字段来实现。 10. **安全性** 当处理来自不可信来源的ZIP文件时,应小心潜在的安全风险,如路径遍历攻击(Path Traversal...

    Java实现的带密码压缩与解压zip文件源码

    3. **压缩过程**:首先,我们需要创建一个`ZipOutputStream`,然后为每个要压缩的文件创建一个`ZipEntry`,设置其密码,然后将其写入`ZipOutputStream`。最后,关闭`ZipOutputStream`以完成写入。 4. **解压过程**...

    Java多个文件根据URL下载后打包zip导出.zip

    在Java编程中,有时我们需要从网络上下载多个文件并将其打包为一个压缩文件,例如ZIP格式,以便于存储或分发。这个过程涉及到文件I/O操作、网络请求以及压缩算法的使用。以下是对这个场景的详细说明: 1. **网络...

    java压缩文件,zip打包

    应用java来压缩需要打包的文件,在系统管理中将毛哥路径或者某个文件夹压缩成zip包

    java文件分割压缩

    Java文件分割压缩是一种常见的操作,尤其在处理大数据或者网络传输时非常有用,因为单个大文件可能会导致处理效率低或传输困难。以下是一些相关的Java编程知识点: 1. **文件I/O操作**:在Java中,`java.io`包提供...

    java压缩zip文件解决中文乱码问题

    在Java编程中,处理文件压缩和解压是常见的任务,特别是使用ZIP格式。然而,当涉及到包含中文字符的文件或目录时,可能会遇到乱码问题。这个问题主要源于字符编码的不一致,通常需要正确设置字符集来确保中文字符在...

    基于Java向zip压缩包追加文件

    在Java编程中,向现有的ZIP压缩包追加文件通常需要经过解压、修改、再压缩的步骤,因为标准的Java ZIP库(如`java.util.zip`包)并不直接支持追加到已存在的ZIP文件。本篇文章将深入探讨如何实现这个功能,主要关注...

    Java实现批量下载并压缩文件.pptx.pptx

    通过以上步骤,可以实现Java环境下从MinIO服务器批量下载文件并压缩为ZIP包的功能,这对于数据迁移、备份和分发场景非常有用。在实际开发中,还需要考虑错误处理、并发下载优化、资源管理等细节,以确保程序的稳定性...

    java 生成zip压缩文件

    在Java编程语言中,生成ZIP压缩文件是一项常见的任务,它涉及到文件操作和数据流的处理。这个过程可以用于归档多个文件或者整个目录结构,便于存储或传输。下面我们将详细探讨如何使用Java来生成ZIP压缩文件,以及...

Global site tag (gtag.js) - Google Analytics