java生成xml并直接写入zip包,可同时写入附件,解决汉字乱码
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;
public class Test {
public static void main(String[] args) {
createXml("aaa.eep");
}
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");
createElement("子节点1", "M1", "子节点1", root);
createElement("子节点2", "M2", "子节点2", root);
Element child3 = createElement("子节点3", "M3", "", root);
child3.addAttribute("年度", "2009");
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"));
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;
}
}