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;
}
}