• 技术文章 >java >java下载

    如何在java中压缩文件并下载?

    小妮浅浅小妮浅浅2021-03-22 10:16:44原创6777

    本教程操作环境:windows7系统、java10版,DELL G3电脑。

    1、ZIP文件格式

    1

    2

    3

    4

    5

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

    [文件头+文件数据+数据描述符]{此处可重复n次}+核心目录+目录结束标识

      

    当压缩包中有多个文件时,就会有多个[文件头+文件数据+数据描述符]

    2、压缩和下载步骤

    (1)创建压缩包前准备

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    //定义压缩包存在服务器的路径

    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)删除压缩包之前的数据,创建压缩包

    1

    util.startZip(FilePath.getPath());

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

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    for (int i = 0; i < FileList.size(); i++) {

    fileVo fileVo=FileList.get(i);

    export(fileVo,request,response,title,FilePath.getPath(),fileName);

    }

    ------

    public void export(fileVo fileVo, HttpServletRequest request,

    HttpServletResponse response, String title,String path, String fileName) {

    FileOutputStream fileOutputStream = null;

    try {

    File dirFile = null

    int i = fileVo.getName().lastIndexOf(".");

            if(i!=-1){//存在文件类型

             fileName1 = fileName1 + "." +  (fileVo.getName()).substring(i+1);

            }

    boolean bFile = false;

    String mkdirName = path + File.separatorChar + title;

    dirFile = new File(mkdirName);

    if(!dirFile.exists()) {

    dirFile.getParentFile().mkdirs();

    }

    if (dirFile.isDirectory()) {

    path = mkdirName + File.separatorChar + fileName1;

    } else {

    bFile = dirFile.mkdirs();

    }

    if (bFile) {

    path = mkdirName + File.separatorChar + fileName1;

    fileOutputStream = new FileOutputStream(path.replace("*", "")); 

    String fileName = URLEncoder.encode(fileName1, "UTF-8");

    if (fileName.length() > 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)压缩完成,关闭输出流。

    1

    util.entdZip(FilePath.getPath());

    以上就是在java中压缩文件并下载的方法,大家可以先了解一些基本的操作步骤,在理清了压缩和下载的流程后,展开对应的代码试验更多Java学习指路:java下载

    专题推荐:java压缩文件
    上一篇:java环境在centos的安装 下一篇:java中Servlet程序下载文件

    相关文章推荐

    • java一维数组赋值的方法• java MyBatis中jar的下载安装步骤• Java语言开发中elasticsearch如何安装?• mybatis在java中的分页查询• 如何在java中制作比心图案?• java中ThreadLocal的应用场景分析• java数组中的异常有哪些?

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网