JAVA读取XML文件放在内存中,如果XML文件发生变化时,重新读取XML文件,并覆盖内存中的数据

来源:互联网 发布:购物比价软件哪个好 编辑:程序博客网 时间:2024/06/11 09:10
通过ip地址获取ip机房中机器所在的位置,这些数据都维护在xml文件中,如果每次拿ip地址去xml文件中取的话,io操作很频繁,对系统不好,所以想把数据取一次放入到内存中,刚开始想做监听来实现,但是感觉还是比较麻烦。所以用对比文件最后一次修改的时间来判断文件是否已经发生变化。
import java.io.File;import java.util.HashMap;import java.util.Iterator;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.Element;import org.dom4j.io.SAXReader;public class ResultByIPUtil {public static  HashMap<String, String> map=new HashMap<String, String>();public static  long time;/** * 解析xml文件放入内存中 */public static void getMessage(){String path="F:/device_info.xm"; File f = new File(path);   time=f.lastModified(); System.out.println(time); SAXReader reader = new SAXReader();   try {Document  doc = reader.read(f);Element element=doc.getRootElement();for (Iterator i = element.elementIterator("device"); i.hasNext();) {Element  el=(Element)i.next();String ip=el.attributeValue("ip");String result=el.attributeValue("alias");map.put(ip, result);}} catch (DocumentException e) {e.printStackTrace();} }/** * 输入参数,获取属性 *  * 如果内存中没有,则先去解析,如果存在,则直接从内存中获取  * @param ip 传入的参数 * @return */public static String get(String ip){if(map.size()==0){getMessage();}else if(getTime()!=time) {getMessage();}String value=map.get(ip);return value;}/** * 获取到文件最后修改时间 * @return */public static long getTime(){String path="F:/device_info.xml"; File f = new File(path);  long  lastTime=f.lastModified();return lastTime;}public static void main(String[] args) {for (int i = 0; i < 10; i++) {String aa=ResultByIPUtil.get("192.168.70.107");System.out.println(aa);}}}

通过get方法进行对比

原创粉丝点击