캐시 메커니즘 읽기 xml
8952 단어 xml 읽기
import java.io.File;
import java.util.HashMap;
public class Cache {
private static Cache instance;
HashMap mapLastModified = new HashMap();
HashMap mapValues = new HashMap();
private Cache() {
super();
}
public static Cache getInstance()
{
if (instance == null)
instance = new Cache();
return instance;
}
public Object get(String name, String path, Class clsParser, Class clsInstantiator, Class clsObj) {
Object obj = null;
String absPath = getClass().getResource(path).getPath();
Long modified = getModified(name, absPath);
if (modified != null) {
obj = readObject(absPath, clsParser, clsInstantiator, clsObj);
mapLastModified.put(name, modified);
mapValues.put(name, obj);
System.out.println("get object from file");
} else {
obj = mapValues.get(name);
System.out.println("get object from cache");
}
return obj;
}
private Long getModified(String name, String path) {
Long modified = new Long(new File(path).lastModified());
Long saveModified = (Long) mapLastModified.get(name);
if ((saveModified != null) && (saveModified.longValue() >= modified.longValue())) {
modified = null;
}
return modified;
}
private Object readObject(String path, Class clsParser, Class clsInstantiator, Class clsObj) {
try {
FileParser parser = (FileParser) clsParser.newInstance();
Instantiator instantiator = (Instantiator) clsInstantiator.newInstance();
Object config = parser.parse(path);
return instantiator.instantiate(clsObj, config);
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
return null;
}
}
2. XML 파일을 분석하는 클래스인 XmlFileParser는 서로 다른 파일의 해석을 쉽게 처리하기 위해 여기에 인터페이스 FileParser를 정의한다. XmlFileParser는 이를 실현했다. 만약에 다른 종류의 파일에 대한 해석도 이를 실현할 수 있다.//FileParser.java public interface FileParser { Object parse(String path);}
//XmlFileParser.java//Jdom의 해석 방식 사용
import java.io.FileInputStream;
import java.io.IOException;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
public class XmlFileParser implements FileParser {
public XmlFileParser() {
super();
}
public Object parse(String path) {
Element root=null;
FileInputStream fi = null;
try {
fi = new FileInputStream(path);
SAXBuilder sb = new SAXBuilder();
Document doc = sb.build(fi);
root= doc.getRootElement();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
fi.close();
} catch (IOException e1) { }
}
return root.getChildren();
}
}
세 번째는 실례화 처리된 클래스ListTypeInstantiator입니다. 마찬가지로 서로 다른 파일의 실례화를 쉽게 처리하기 위해 여기에 인터페이스 Instantiator를 정의합니다.ListTypeInstantiator가 이를 실현했습니다.Instantiator.java public interface Instantiator { Object instantiate(Class clazz, Object configuration); }
//ListTypeInstantiator.java
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.beanutils.BeanUtils;
import org.jdom.Element;
public class ListTypeInstantiator implements Instantiator {
public ListTypeInstantiator() {
super();
}
public Object instantiate(Class clazz, Object configuration) {
List arr = new ArrayList();
Object bean = null;
List children = (List) configuration;
Element child = null;
List attributes = null;
Element attribute = null;
try {
for(int i=0; i< children.size(); i++) {
child = (Element) children.get(i);
bean = clazz.newInstance();
attributes = child.getChildren();
for(int j=0; j< attributes.size(); j++) {
attribute = (Element) attributes.get(j);
BeanUtils.setProperty(bean, attribute.getName(), attribute.getText());
}
arr.add(bean);
}
} catch(Exception e) {
e.printStackTrace();
}
return arr;
}
}
넷째, 제가 원하는 데이터 형식을 봉인한JavaBean이 필요합니다. 여기는NewsBean{}.//로 설정합니다.NewsBean.java
public class NewsBean {
private Long id;
private String newsTitle;
private String newsContent;
private String newsType;
private String deployDate;
private String cancelDate;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getNewsTitle() {
return newsTitle;
}
public void setNewsTitle(String newsTitle) {
this.newsTitle = newsTitle;
}
public String getNewsContent() {
return newsContent;
}
public void setNewsContent(String newsContent) {
this.newsContent = newsContent;
}
public String getNewsType() {
return newsType;
}
public void setNewsType(String newsType) {
this.newsType = newsType;
}
public String getDeployDate() {
return deployDate;
}
public void setDeployDate(String deployDate) {
this.deployDate = deployDate;
}
public String getCancelDate() {
return cancelDate;
}
public void setCancelDate(String cancelDate) {
this.cancelDate = cancelDate;
}
}
5 마지막 테스트 결과 news.xml 파일을classes 디렉터리에 두십시오.//MainClass.java
import java.util.List;
public class MainClass{
public static void main(String[] args) throws Exception {
List news1 = null;
List news2 = null;
NewsBean bean = null;
news1 = (List)Cache.getInstance().get("news", "/news.xml", XmlFileParser.class, ListTypeInstantiator.class, NewsBean.class);
for (int i = 0; i < news1.size(); i++) {
bean = (NewsBean) news1.get(i);
System.out.println(bean.getId());
System.out.println(bean.getNewsTitle());
System.out.println(bean.getNewsContent());
System.out.println(bean.getNewsType());
System.out.println(bean.getDeployDate());
System.out.println(bean.getCancelDate());
}
System.out.println("Ok");
news2 = (List)Cache.getInstance().get("news", "/news.xml", XmlFileParser.class, ListTypeInstantiator.class, NewsBean.class);
for (int i = 0; i < news2.size(); i++) {
bean = (NewsBean) news2.get(i);
System.out.println(bean.getId());
System.out.println(bean.getNewsTitle());
System.out.println(bean.getNewsContent());
System.out.println(bean.getNewsType());
System.out.println(bean.getDeployDate());
System.out.println(bean.getCancelDate());
}
}
}
첫 번째는 파일에서 데이터를 읽고, 두 번째는 캐시에서 읽기 때문에 몇 번 더 읽으면 훨씬 빠르다.
테스트의 news.xml 파일
실행 결과: C:\java>javaMainClassget object from filenews 1jdk1.5 API 중국어 버전 빨리 다운로드 2005-11-302006-1-30news 2javaRPG 게임 빨리 다운로드 2005-11-302006-30Oknewsget object from cache1jdk 1.5 API 중국어 버전 빨리 다운로드 2005-11-302006-1-30 news 2javaRPG 게임 빨리 다운로드 2005-11-302006-1-30
C:\java>
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Java 읽기 XML 구성 파일처음에는 mysql의 연결 파라미터를 프로그램에 쓰지 않으려고 했는데, 매번 파라미터를 수정하는 것이 번거롭기 때문에 쉽게 수정할 수 있는 방법을 찾으려고 했는데, 나중에 XML 파일을 통해 프로그램의 파라미터를 저...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.