有时候对接第三方平台项目的时候无法使用数据库、缓存一类的数据时,这时候如果想缓存一些数据,以防止程序突然停止或服务器被频繁重启,我们需要记录个时间点或者程序进行到哪一步了,那可以将需要保存的数据存放在硬盘中,定时刷新,每次程序启动时先去解析这些数据,就可解决这类的问题
下面是通常的做法
//引入pom依赖
<dependency>
<groupId>dom4j</groupId>
<artifactId>dom4j</artifactId>
<version>1.6.1</version>
</dependency>
实现代码
import java.io.File;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
/**
* 使用DOM生成XML文档
*
* @author ylg
*
*/
public class WriteXmlDemo {
public static void main(String[] args) {
Map<String, String> map = new HashMap<String, String>();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
map.put("time", simpleDateFormat.format(new Date()));
map.put("id", "12345");
map.put("name", "alan11111");
map.put("mail", "1111@qq.com");
//写入xml
boolean flushXml = flushXml(map, "F:\\11.xml");
if (flushXml) {
System.out.println("写入完毕!");
}
// 读取xml
Map<String, String> readXml = readXml("F:\\11.xml");
for (String param : readXml.keySet()) {
System.out.println(param+":"+readXml.get(param));
}
}
/**
* 将数据保存
* @param map 数据集合
* @param filePath xml文件保存路径
* @return 刷新成功或失败
*/
public static synchronized boolean flushXml(Map<String, String> map, String filePath) {
Document doc = DocumentHelper.createDocument();
Element root = doc.addElement("root");
for (String ele : map.keySet()) {
Element empEle = root.addElement(ele);
empEle.addText(map.get(ele));
}
try {
XMLWriter writer = new XMLWriter(OutputFormat.createPrettyPrint());
FileOutputStream fos = new FileOutputStream(filePath);
writer.setOutputStream(fos);
writer.write(doc);
writer.close();
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
/**
* 从指定位置读取数据
* @param filePath xml文件存放的位置
* @return map 解析的xml数据集合
*/
public static Map<String, String> readXml(String filePath) {
SAXReader reader = new SAXReader();
Document doc = null;
Map<String, String> map = new HashMap<String, String>();
try {
doc = reader.read(new File(filePath));
Element root = doc.getRootElement();
System.out.println("获取了根元素:" + root.getName());
@SuppressWarnings("unchecked")
List<Element> elements = root.elements();
for (Element element : elements) {
map.put(element.getName(), element.getText());
}
return map;
} catch (DocumentException e) {
e.printStackTrace();
return null;
}
}
}
日常记录