您的位置:首页 > 编程语言 > Java开发

下载文件打包 zip java

2016-06-14 14:01 549 查看
Demo:

package com.xmjr.controller.sys;

import java.io.BufferedInputStream;

import java.io.BufferedOutputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.net.URLEncoder;

import java.util.ArrayList;

import java.util.List;

import java.util.zip.ZipEntry;

import java.util.zip.ZipOutputStream;

import javax.servlet.http.HttpServletResponse;

import org.springframework.stereotype.Controller;

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

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

@Controller

@RequestMapping("/test")

public class Test {

    @RequestMapping(value = "/downloadftp", method = RequestMethod.GET)

    public String moredownload(HttpServletResponse response) {

        // 生成的ZIP文件名为Demo.zip

        String tmpFileName = "demo.zip";

        String FilePath = "C:\\Users\\Administrator\\Desktop\\";

        byte[] buffer = new byte[1024];

        String strZipPath = FilePath + tmpFileName;

        try {

            ZipOutputStream out = new ZipOutputStream(new FileOutputStream(strZipPath));

            // 需要同时下载的两个文件result.txt ,source.txt

            List<File> FileList = new ArrayList<>();

            FileList.add(new File(FilePath + "result.zip"));

            FileList.add(new File(FilePath + "source.zip"));

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

                FileInputStream fis = new FileInputStream(FileList.get(i));

                out.putNextEntry(new ZipEntry(FileList.get(i).getName()));

                // 设置压缩文件内的字符编码,不然会变成乱码

                // out.setEncoding("GBK");

                int len;

                // 读入需要下载的文件的内容,打包到zip文件

                while ((len = fis.read(buffer)) > 0) {

                    out.write(buffer, 0, len);

                }

                out.closeEntry();

                fis.close();

            }

            out.close();

            downFile(response, tmpFileName);

        } catch (Exception e) {

            System.out.println("压缩时出错了!");

        }

        return null;

    }

    private void downFile(HttpServletResponse response, String str) {

        try {

            String FilePath = "C:\\Users\\Administrator\\Desktop\\";

            String path = FilePath + str;

            File file = new File(path);

            if (file.exists()) {

                InputStream ins = new FileInputStream(path);

                BufferedInputStream bins = new BufferedInputStream(ins);

                // 放到缓冲流里面

                OutputStream outs = response.getOutputStream();// 获取文件输出IO流

                BufferedOutputStream bouts = new BufferedOutputStream(outs);

                response.setContentType("application/x-download");

                // 设置response内容的类型

                response.setHeader("Content-disposition",

                        "attachment;filename=" + URLEncoder.encode(str, "UTF-8"));

                // 设置头部信息

                int bytesRead = 0;

                byte[] buffer = new byte[8192];

                // 开始向网络传输文件流

                while ((bytesRead = bins.read(buffer, 0, 8192)) != -1) {

                    bouts.write(buffer, 0, bytesRead);

                }

                bouts.flush();// 这里一定要调用flush()方法

                ins.close();

                bins.close();

                outs.close();

                bouts.close();

            } else {

                // response.sendRedirect("../error.jsp");

            }

        } catch (IOException e) {

            System.out.println("下载出错了!");

        }

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  zip java 下载打包