• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

java中压缩文件并下载的实例详解

java 搞代码 4年前 (2022-01-05) 78次浏览 已收录 0个评论

在本篇内容里小编给大家整理的是一篇关于java中压缩文件并下载的实例详解内容,有兴趣的朋友们可以学习下。

当我们对一些需要用到的资料进行整理时,会发现文件的内存占用很大,不过是下载或者存储,都不是很方便,这时候我们会想到把文件变成zip格式,即进行压缩。在正式开始压缩和下载文件之前,我们可以先对zip的格式进行一个了解,然后再就具体的方法给大家带来分享。

1、ZIP文件格式

[local file header + file data + data descriptor]{1,n} + central directory + end of central directory record

[文件头+文件数据+数据描述符]{此处可重复n次}+核心目录+目录结束标识当压缩包中有多个文件时,就会有多个[文件头+文件数据+数据描述符]

2、压缩和下载步骤

(1)创建压缩包前准备

 //定义压缩包存在服务器的路径 String path = request.getSession().getServletContext().getRealPath("/WEB-INF/fileTemp"); //创建路径 File FilePath = new File(path + "/file"); if (!FilePath.exists()) { FilePath.mkdir(); } String path = FilePath.getPath() + "/"; //定义导出压缩包的名称 String title ="问价压缩包"; //压缩包格式 String fileNamezip = title + ".zip"; String zipPath = path + fileNamezip; //创建一个ZIP输出流并实例化缓冲区域 ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream(zipPath))); //设置编码格式(解决linux出现乱码) out.setEncoding("gbk"); //定义字节数组 byte data[] = new byte[2048]; //获取文件记录(获取文件记录代码省略) List FileList =。。。; if (!FileList.isEmpty()) { ExportUtil util = new ExportUtil(title,title, request, response, FilePath.getPath()); }

(2)删除压缩包之前的数据,创建压缩包

 util.startZip(FilePath.getPath());

(3)循环将需要压缩的文件放到压缩包中

 for (int i = 0; i  110) { fileName = new String(fileName1.getBytes("gb2312"), "ISO8859-1"); } response.setHeader("Connection", "close"); response.setHeader("Content-Type", "application/octet-stream"); response.setContentType("application/x-msdownload"); response.setHeader("Content-Disposition", "attachment; filename=\"" + Utf8Util.toUtf8String(fileName) + "\""); //读取文件流输出到到另一个位置 fileVo.getFileIo(fileOutputStream); fileOutputStream.close(); } catch (Exception e) { logger.error("异常:原因如下"+e.getMessage(), e); } finally { try { if (fileOutputStream != null) { fileOutputStream.close(); } } catch (IOException e1) { // TODO Auto-generated catch block logger.error("异常:原因如下"+e1.getMessage(), e1); } } }

(4)压缩完成,关闭输出流。

 util.entdZip(FilePath.getPath());

来源gao@daima#com搞(%代@#码网java生成压缩文件示例代码扩展

 import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipOutputStream; /**  * @project: Test  * @author chenssy  * @date 2013-7-28  * @Description: 文件压缩工具类  *                   将指定文件/文件夹压缩成zip、rar压缩文件  */ public class CompressedFileUtil {     /**      * 默认构造函数      */     public CompressedFileUtil(){     }     /**      * @desc 将源文件/文件夹生成指定格式的压缩文件,格式zip      * @param resourePath 源文件/文件夹      * @param targetPath  目的压缩文件保存路径      * @return void      * @throws Exception      */     public void compressedFile(String resourcesPath,String targetPath) throws Exception{         File resourcesFile = new File(resourcesPath);     //源文件         File targetFile = new File(targetPath);           //目的         //如果目的路径不存在,则新建         if(!targetFile.exists()){                 targetFile.mkdirs();          }         String targetName = resourcesFile.getName()+".zip";   //目的压缩文件名         FileOutputStream outputStream = new FileOutputStream(targetPath+"\\"+targetName);         ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream(outputStream));         createCompressedFile(out, resourcesFile, "");         out.close();      }     /**      * @desc 生成压缩文件。      *                  如果是文件夹,则使用递归,进行文件遍历、压缩      *       如果是文件,直接压缩      * @param out  输出流      * @param file  目标文件      * @return void      * @throws Exception      */     public void createCompressedFile(ZipOutputStream out,File file,String dir) throws Exception{         //如果当前的是文件夹,则进行进一步处理         if(file.isDirectory()){             //得到文件列表信息             File[] files = file.listFiles();             //将文件夹添加到下一级打包目录             out.putNextEntry(new ZipEntry(dir+"/"));             dir = dir.length() == 0 ? "" : dir +"/";             //循环将文件夹中的文件打包             for(int i = 0 ; i  0){                 out.write(buffer,0,j);             }             //关闭输入流             fis.close();         }     }     public static void main(String[] args){         CompressedFileUtil compressedFileUtil = new CompressedFileUtil();         try {             compressedFileUtil.compressedFile("G:\\zip", "F:\\zip");             System.out.println("压缩文件已经生成...");         } catch (Exception e) {             System.out.println("压缩文件生成失败...");             e.printStackTrace();         }     } } 

以上就是java中压缩文件并下载的实例详解的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:java中压缩文件并下载的实例详解

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址