以压缩文件的形式,下载代码

目录

1,前言

2,相关类

3,相关类或接口的继承与实现关系

4,源码如下

5,参考资料


 

1,前言

当前这个版本(2019年1月16日 00:17:43)现在只有单文件的压缩,待后续补充文件夹递归下载。

2,相关类

import java.util.zip.ZipEntry;//这个类用于表示一个压缩文件条目。
import java.util.zip.ZipOutputStream;//这个类实现了一个用于在压缩文件格式中写入文件的输出流过滤器。包括支持压缩和解压项。

相关说明,请参考jdk的文档

3,相关类或接口的继承与实现关系

ZipEntry 

ZipOutputStream

4,源码如下

package com.wayne.utils;


import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class ZipUtils {
    private ZipUtils(){} // 隐藏构造函数,是个工具类

    /**
     * 压缩文件核心类
     * @param inFile 要压缩的文件
     * @param out   压缩文件的输出流
     * @param dir   压缩文件的输出路径
     * @throws IOException 抛出文件异常
     */
    public static void doZip(File inFile, ZipOutputStream out,String dir) throws IOException {
        String entryName = null;
        if(!StringUtils.equals("",dir)){
            entryName = dir + "/" + inFile.getName();
        } else {
            entryName = inFile.getName();
        }

        ZipEntry entry = new ZipEntry(entryName);
        out.putNextEntry(entry);

        int len = 0;
        byte[] buffer = new byte[1024];
        FileInputStream fis = new FileInputStream(inFile);
        while ((len = fis.read(buffer)) > 0) {
            out.write(buffer,0,len);
            out.flush();
        }
        out.closeEntry();
        out.close();
        fis.close();
    }

    public static void main(String[] args) throws Exception {
        String filePath = "G:\\tempFiles\\";
        String fileName = "GreetingController.java";
        String zipFileName = "GreetingController.zip";

        File file = new File(filePath + fileName);

        ZipOutputStream out = new ZipOutputStream(new FileOutputStream(filePath+zipFileName));

        ZipUtils.doZip(file,out,"");
    }
}

5,参考资料

 1)Java实现zip压缩多个文件下载

 2)jdk1.8 api(原版)

 3)jdk1.8 api (中文版)

如果你要在Java中将重名的文件压缩并下载,你可以使用以下步骤: 1. 将要下载的文件重命名,例如给每个文件加上一个唯一的编号。 2. 将重命名后的文件压缩成一个压缩文件,例如ZIP格式。 3. 将压缩文件作为响应发送给客户端浏览器,让用户可以下载。 下面是一个示例代码,实现将多个文件压缩并下载: ```java import java.io.*; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class DownloadServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //获取要下载的文件列表 String[] filenames = {"file1.txt", "file2.txt", "file3.txt"}; //创建临时文件夹 File tmpdir = new File(System.getProperty("java.io.tmpdir"), "download"); tmpdir.mkdirs(); //将重名的文件重命名并复制到临时文件夹中 for (int i = 0; i < filenames.length; i++) { File srcfile = new File(filenames[i]); String newname = "file" + i + ".txt"; File dstfile = new File(tmpdir, newname); copyFile(srcfile, dstfile); } //将临时文件夹中的文件压缩成一个ZIP文件 File zipfile = new File(tmpdir, "download.zip"); zipFiles(tmpdir.listFiles(), zipfile); //设置响应头,让浏览器下载该文件 response.setHeader("Content-Disposition", "attachment; filename=\"download.zip\""); response.setContentType("application/zip"); response.setContentLength((int) zipfile.length()); //将压缩文件发送给客户端浏览器 BufferedInputStream in = new BufferedInputStream(new FileInputStream(zipfile)); BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream()); byte[] buffer = new byte[4096]; int length; while ((length = in.read(buffer)) > 0) { out.write(buffer, 0, length); } in.close(); out.flush(); out.close(); //删除临时文件夹和压缩文件 deleteDir(tmpdir); zipfile.delete(); } //复制文件 private void copyFile(File src, File dst) throws IOException { InputStream in = new FileInputStream(src); OutputStream out = new FileOutputStream(dst); byte[] buffer = new byte[4096]; int length; while ((length = in.read(buffer)) > 0) { out.write(buffer, 0, length); } in.close(); out.close(); } //压缩文件 private void zipFiles(File[] files, File zipfile) throws IOException { ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipfile)); for (File file : files) { FileInputStream in = new FileInputStream(file); out.putNextEntry(new ZipEntry(file.getName())); byte[] buffer = new byte[4096]; int length; while ((length = in.read(buffer)) > 0) { out.write(buffer, 0, length); } in.close(); } out.close(); } //删除文件夹及其内容 private void deleteDir(File dir) { for (File file : dir.listFiles()) { if (file.isDirectory()) { deleteDir(file); } else { file.delete(); } } dir.delete(); } } ``` 在上面的示例代码中,我们使用Java的ZipOutputStream类将多个文件压缩成一个ZIP文件,然后将该文件作为响应发送给客户端浏览器,让用户可以下载。在压缩过程中,我们将重名的文件重命名并复制到一个临时文件夹中,压缩完成后再删除该文件夹和压缩文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值