文件夹怎么压缩打包(怎么把文件弄成压缩包)

文件夹怎么压缩打包,,怎么把文件弄成压缩包。小编来告诉你更多相关信息。前几天发布了一篇java压缩文件的文章,今天有朋友跟我说,这压缩没啥技术含量啊,你再弄个压缩完然后返回前端下载的功能呗。其实吧我觉得下载功能比压缩更简单吧,

文件夹怎么压缩打包,,怎么把文件弄成压缩包。小编来告诉你更多相关信息。

前几天发布了一篇java压缩文件的文章,今天有朋友跟我说,这压缩没啥技术含量啊,你再弄个压缩完然后返回前端下载的功能呗。其实吧我觉得下载功能比压缩更简单吧,压缩的递归我至少弄了半天才解决。但是朋友有需求,那就搞一下呗。

下载方法有两种:可以用response.getOutputStream().write()方法,也可以用SpringMVC的ResponseEntity方法。

文件夹怎么压缩打包(怎么把文件弄成压缩包)

下载方式也有两种,一种是先生成压缩文件放在磁盘上,然后再调用下载方法,下载完后删除磁盘中的压缩文件;另一种方法是将压缩文件以流的方式传递。

代码比较粗糙,就是想到啥就直接写下来了,有待优化的地方还望大家多多指点

import org.springframework.http.HttpHeaders;

import org.springframework.http.HttpStatus;

import org.springframework.http.MediaType;

import org.springframework.http.ResponseEntity;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.RestController;

import java.io.*;

import java.util.zip.ZipEntry;

import java.util.zip.ZipOutputStream;

@RestController

public class FileToZipDownload {

* 文件压缩功能

* @param sourcesFiles 源资源,即需要被压缩的文件

* @param zos 压缩包

* @param fileName 压缩包内的文件名称

public void compressFile(File sourcesFiles, ZipOutputStream zos,String fileName) throws IOException {

//1.如果源资源是目录,先判断是否空文件夹

if (sourcesFiles.isDirectory()){

File[] files = sourcesFiles.listFiles();

//1-1.先判断是否空文件夹

if (files.length ==0){

//1-2.空文件夹,则在压缩包中把目录加上

zos.putNextEntry(new ZipEntry(fileName + File.separator));

}else {

//1-3.如果不是空文件夹,则递归列出里面的文件以及文件夹

for (File file : files) {

//文件名称以目录保持好

compressFile(file,zos,fileName + File.separator + file.getName());

}

}

}else {

//将文件放到压缩文件中,同时保留文件名称

zos.putNextEntry(new ZipEntry(fileName));

//IO的固化操作,先读取文件再写入文件压缩输出流中,过程不解释

FileInputStream inputStream = new FileInputStream(sourcesFiles);

int len;

byte[] bytes = new byte[2048];

while ((len = inputStream.read(bytes)) != -1){

zos.write(bytes,0,len);

}

zos.flush();//刷新流

zos.closeEntry();

inputStream.close();

}

* ResponseEntity继承了HttpEntity类。

HttpEntity代表一个http请求或者响应实体,其内部有两个成员变量:header及body。

代表http请求或响应的header及body,其中的body是泛化的。

具体方法可以百度一下

* @return ResponseEntity

* @throws Exception

@GetMapping(\”/down\”)

public ResponseEntity fileDownload(){

//将要压缩的文件夹

File sourceFiles = new File(\”E:\” + File.separator + \”hello\”);

//设置响应头

HttpHeaders headers = new HttpHeaders();

//第一个参数name:设置响应方式,其中,attachment是通知浏览器以下载的方式打开文件;

//第二个参数filename:文件下载的名称

headers.setContentDispositionFormData(\”attachment\”,sourceFiles.getName() + \”.zip\”);

//通知浏览器以流的形式下载返回文件数据

headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);

//缓存数据输出流,可转换成byte字节

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

//创建压缩输出流对象,输出到缓存数据输出流中,不保存到磁盘上

ZipOutputStream zos = new ZipOutputStream(outputStream);

try {

//调用压缩文件的方法

this.compressFile(sourceFiles,zos,sourceFiles.getName());

} catch (IOException e) {

e.printStackTrace();

}finally {

try {

if (zos != null){

//ZipOutputStream压缩输出流必须在执行压缩操作后再关闭

zos.close();

}

} catch (IOException e) {

e.printStackTrace();

}

}

//outputStream.toByteArray(),将缓存数据输出流转成字节,返回前端页面。

return new ResponseEntity(outputStream.toByteArray(),headers, HttpStatus.OK);

本文内容由互联网用户自发贡献,该文观点仅代表作者本人。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 203304862@qq.com 举报,一经查实,本站将立刻删除。本文链接:https://xz1898.com/n/154708.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-02-03 20:30
下一篇 2023-02-03 20:31

相关推荐

发表回复

登录后才能评论

联系我们

在线咨询: QQ交谈

邮件:97552693@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息