通过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方法进行对比