当我们需要将信息写入XML保存起来(即写入对应的标签里),以便后续使用时,写了一个方便使用的类。
1. 假设我们的要保存的XML格式如下:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<users>
<user>
<id>0001</id>
<name>心晴儿</name>
<gender>f</gender>
<imgurl>http://XXXXXXX</imgurl>
</user>
</users>
2. 写入XML的类:
package weibo.spider;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.dom4j.io.XMLWriter;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import weibo.dao.RelationDAO;
import weibo.dao.UserDAO;
import weibo.pojo.RelationPOJO;
import weibo.pojo.UserPOJO;
public class DataExport {
private String fileName;
private Document document;
public DataExport(String fileName){
this.fileName = fileName;
createXmlDocument();
}
private void createXmlDocument(){
try{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
document = builder.newDocument();
}catch(ParserConfigurationException e){
e.printStackTrace();
}
}
/**
* 创建根节点
* @param name 根节点名称
* @return
*/
public Element createRootElement(String name) {
Element root = document.createElement(name);
document.appendChild(root);
return root;
}
/**
* 创建子节点
* @param parent 父节点
* @param tagName 节点名称
* @param text 节点内容
* @return
*/
public Element createElement(Element parent, String tagName, String text) {
Element element = document.createElement(tagName);
if (text != null && text.length() > 0) {
element.setTextContent(text);
}
parent.appendChild(element);
return element;
}
/**
* 保存文件
* @throws Exception
*/
public void toSave() throws Exception {
TransformerFactory factory = TransformerFactory.newInstance();
factory.setAttribute("indent-number", new Integer(4));// 设置缩进长度为4
Transformer transformer = factory.newTransformer();
transformer.setOutputProperty(OutputKeys.INDENT, "yes");// 设置自动换行
DOMSource source = new DOMSource(document);
transformer.transform(source, new StreamResult(new BufferedWriter(
new OutputStreamWriter(new FileOutputStream(fileName),
"UTF-8"))));
}
public void exportRelations(){
RelationDAO dao = new RelationDAO();
ArrayList<RelationPOJO> list = (ArrayList<RelationPOJO>) dao.findAll();
System.out.println(list.size());
File file = new File(fileName);
try {
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(new FileOutputStream(file),"UTF-8"));
for(RelationPOJO r : list)
writer.write(r.getUid() +" "+r.getFriendid()+"\n");
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public void exportUsers(){
UserDAO dao = new UserDAO();
Element root = createRootElement("users");
ArrayList<UserPOJO> list = (ArrayList<UserPOJO>) dao.findAll();
System.out.println(list.size());
int count = 0;
for(UserPOJO u : list){
Element ele = createElement(root,"user","");
createElement(ele,"id",u.getId().toString());
createElement(ele,"name",u.getUsername());
createElement(ele,"gender",u.getGender());
createElement(ele,"imgurl",u.getImageurl());
if(count++ > 100)
break;
}
try {
toSave();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
DataExport export = new DataExport("F://users.txt");
export.exportUsers();
// export.exportRelations();
}
}