导出:xml zip

import java.util.zip.ZipOutputStream;
import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.math.BigDecimal;
import java.nio.charset.Charset;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
//https://blog.csdn.net/yangymy/article/details/91375621
public class Test1 {

    public static void main(String[] args) {
        createXml("aaa.eep");
    }

    /**
     * java生成xml并直接写入zip包
     * @param rootpath
     * @param fileName
     */
    public static void createXml(String fileName) {
        ZipOutputStream zipos = null;
        DataOutputStream os = null;
        InputStream in = null;

        try {
            zipos = new ZipOutputStream(new BufferedOutputStream(new FileOutputStream("d:/123.zip")),
                    Charset.forName("UTF-8"));
            zipos.setMethod(ZipOutputStream.DEFLATED); // 设置压缩方法
            os = new DataOutputStream(zipos);

            Document doc = DocumentHelper.createDocument();
            doc.setXMLEncoding("UTF-8");
            // 根节点
            Element root = doc.addElement("根节点", "http://www.xxxxxx.cn");
            root.addNamespace("xsi", "http://www.xxxxxx.cn");
            root.addAttribute("name", "M0");
            // 子节点1
            createElement("子节点1", "M1", "子节点1", root);
            // 子节点2
            createElement("子节点2", "M2", "子节点2", root);
            // 子节点3
            Element child3 = createElement("子节点3", "M3", "", root);
            child3.addAttribute("年度", "2009");
            // 子节点3的子节点
            createElement("节点3的子节点1", "M31", 100, child3);
            createElement("节点3的子节点2", "M32", 55.5, child3);
            createElement("节点3的子节点3", "M33", new Date(), child3);

            zipos.putNextEntry(new ZipEntry(fileName));
            OutputFormat outputFormat = OutputFormat.createPrettyPrint();
            outputFormat.setEncoding("UTF-8");
            XMLWriter writer = new XMLWriter(os, outputFormat);
            writer.setEscapeText(false);
            writer.write(doc);

            // 附件
            zipos.putNextEntry(new ZipEntry("123.txt"));
            OutputFormat outputFormat1 = OutputFormat.createPrettyPrint();
            outputFormat.setEncoding("UTF-8");
            XMLWriter writer1 = new XMLWriter(os, outputFormat1);
            writer1.setEscapeText(false);
            writer1.write("asdasdasdas");

//            in = new FileInputStream("d:/123.txt");
//            if (in != null) {
//                byte[] b = new byte[1024 * 10];
//                int length = 0;
//                while ((length = in.read(b)) != -1) {
//                    os.write(b, 0, length);
//                }
//            }

            zipos.closeEntry();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (zipos != null) {
                try {
                    zipos.close();
                } catch (Exception e2) {
                    e2.printStackTrace();
                }
            }
            if (os != null) {
                try {
                    os.close();
                } catch (Exception e2) {
                    e2.printStackTrace();
                }
            }
            if (in != null) {
                try {
                    in.close();
                } catch (Exception e2) {
                    e2.printStackTrace();
                }
            }
        }
    }

    public static Element createElement(String tag, String name, Object text, Element parent) {
        Element element = parent.addElement(tag);
        if (element != null) {
            element.addAttribute("name", name);
            if (text == null)
                text = "";
            String str = "";
            if (text instanceof Date) {
                Date d = (Date) text;
                SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                str = format.format(d);
            } else if (text instanceof BigDecimal) {
                str = text.toString();
            } else {
                str = String.valueOf(text);
            }
            if (!str.trim().equals("")) {
                element.addText(str);
            }
        }
        return element;
    }

}
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

@RestController
@RequestMapping("xxxx")
public class DownLoadController {
    private static final Logger logger = LoggerFactory.getLogger(UrlFilesToZip.class);
    //http://localhost:8099//xxxx/multipleDownLoad?urls=www.baidu.com&destFileName=123
    /**
     * 下载多个文件这 @return
     */
    @RequestMapping("/multipleDownLoad")
    public static void getFile(String urls, String destFileName, HttpServletResponse response) throws Exception, IOException {
        List<String> urlList = new ArrayList<>();
        for (String id : StringUtils.splitToList(urls, ",")) urlList.add(id);
        try {
            String filename = new String((destFileName + ".zip").getBytes("UTF-8"), "ISO8859-1");/*控制文件名编码*/
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            ZipOutputStream zos = new ZipOutputStream(bos);
            UrlFilesToZip s = new UrlFilesToZip();
            int idx = 1;
            String postfix = "";
            for (String oneFile : urlList) {
                if (!(oneFile == null || oneFile.indexOf(".") == -1)) {/*如果图片地址为null或者地址中没有"."就返回""*/
                    postfix = oneFile.substring(oneFile.lastIndexOf(".") + 1).trim().toLowerCase();
                }
                if (!org.springframework.util.StringUtils.isEmpty(postfix)) postfix = "." + postfix;
                zos.putNextEntry(new ZipEntry(destFileName + idx + postfix));
                byte[] bytes = s.getImageFromURL(oneFile);
                zos.write(bytes, 0, bytes.length);
                zos.closeEntry();
                idx++;
            }
            zos.close();
            response.setContentType("application/octet-stream; charset=utf-8");/* response.setContentType("application/force-download");// 设置强制下载不打开*/
            response.addHeader("Content-Disposition", "attachment;fileName=" + filename);/* 设置文件名*/
            OutputStream os = response.getOutputStream();
            os.write(bos.toByteArray());
            os.close();
        } catch (FileNotFoundException ex) {
            logger.error("FileNotFoundException", ex);
        } catch (Exception ex) {
            logger.error("Exception", ex);
        }
    }
}

class StringUtils {
    public static List<String> splitToList(String str, String regex) {
        if (org.springframework.util.StringUtils.isEmpty(str)) return null;
        else {
            ArrayList resultList = new ArrayList();
            List resultObject =  Arrays.asList((str.split(regex)));
            Iterator i$ = resultObject.iterator();
            while (i$.hasNext()) {
                Object obj = i$.next();
                resultList.add(obj.toString());
            }
            return resultList;
        }
    }
}

/**
 * Created by Admin on 2017/10/19.
 */
 class UrlFilesToZip {
    private static final Logger logger = LoggerFactory.getLogger(UrlFilesToZip.class);/*根据文件链接把文件下载下来并且转成字节码*/

    public byte[] getImageFromURL(String urlPath) {
        byte[] data = null;
        InputStream is = null;
        HttpURLConnection conn = null;
        try {
            URL url = new URL(urlPath);
            conn = (HttpURLConnection) url.openConnection();
            conn.setDoInput(true);/* conn.setDoOutput(true);*/
            conn.setRequestMethod("GET");
            conn.setConnectTimeout(6000);
            is = conn.getInputStream();
            if (conn.getResponseCode() == 200) data = readInputStream(is);
            else data = null;
        } catch (MalformedURLException e) {
            logger.error("MalformedURLException", e);
        } catch (IOException e) {
            logger.error("IOException", e);
        } finally {
            try {
                if (is != null) is.close();
            } catch (IOException e) {
                logger.error("IOException", e);
            }
            conn.disconnect();
        }
        return data;
    }

    public byte[] readInputStream(InputStream is) {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int length = -1;
        try {
            while ((length = is.read(buffer)) != -1) baos.write(buffer, 0, length);
            baos.flush();
        } catch (IOException e) {
            logger.error("IOException", e);
        }
        byte[] data = baos.toByteArray();
        try {
            is.close();
            baos.close();
        } catch (IOException e) {
            logger.error("IOException", e);
        }
        return data;
    }

}
原文地址:https://www.cnblogs.com/xyyou/p/12409535.html