在项目中可能会遇到,下载文件的情况,下载文件还是比较好处理的
比较简单的方式就是我们直接写入OutPutstream,网上会有很所类似的教程。
也可以使用一些现成的工具类。
那么当我们遇到了需要下载文件夹的时候,我们不得不遍历所有的文件,去逐个的下载文件,这个时候我们最好是返回给前端一个zip或者tar包的形式,供用户下载使用,这里我来分享一下有关Java如何将文件夹打包并且上传。
这里我们使用的核心类就是文章来源:https://www.toymoban.com/news/detail-624107.html
ZipOutputStream
代码如下文章来源地址https://www.toymoban.com/news/detail-624107.html
// 一般情况,我们先新建一个ZipOutputStream对象, 其中的outputStream就是我们的输出流
ZipOutputStream zip = new ZipOutputStream(outputStream);
// 假如这就是我们要下载的文件夹。
String dir = "/root/data"
// 文件的名称可以根据需要来定制化
String fileName = "data.zip";
response.setCharacterEncoding("UTF-8");
response.addHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Expose-Headers", "*");
// 下载文件名乱码问题
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
//response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + downloadName);
response.setContentType("application/octet-stream;charset=UTF-8");
// 这就是最高级目录了,这也是最核心的方法,建立zip包下的层级关系,然后遇到文件写进去就行了,其他没啥特殊的
zip.putNextEntry(new ZipEntry(dir));
// 接下来,就是写一个递归方法了,类似下面的这个方法 , 伪代码如下
private void handlerFile(Item item, String base) {
zip.putNextEntry(new ZipEntry(dir + "" + base));
if(item.isdir()) {
// 如果是文件夹,文件夹没有内容的,只需要继续递归,要注意的是,zip文件夹的路径拼接
handlerFile(item, base + item.name);
} else {
// 写文件,这里就要正式写文件了
inputStream = item.getinputStream;
BufferedInputStream bis = new BufferedInputStream(inputStream);
byte[] buffer = new byte[1024];
int num;
while ((num = inputStream.read(buffer)) != -1) {
zip.write(buffer, 0, num);
}
zip.flush();
IOUtils.closeQuietly(bis);
}
}
到了这里,关于使用Java打包Zip文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!