近来公司做一个项目,其中有一个绘制地图的的软件,功能是需要保存图片文件的时候包括一份临时的文件,下次打开可以在原来的临时文件基础上继续画,但是在画图功能中有一个标识,就是线的标识,比如画一条实线标识为1,再画一条是2,一次下去,但是如果下次再打开的时候都归零了,这样不好控制,而且想到用集合的方法,但是集合是临时存放在内存的,不可以,所以想到用一种方法把它存放到xml中,下次打开的时候直接从里面取出来,就可以,
1.创建xml的类
package com.gyhq.tools;
import java.io.FileWriter;
import java.io.IOException;
import org.dom4j.Document;
import org.dom4j.DocumentFactory;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
public class CreateXml {
public void create(String xmlFileName,String line,String qb,String xLine,String cz,String tz,Integer l,Integer q,Integer xx,Integer c,Integer t){
//创建一个解析xml的工厂实例
DocumentFactory factory = new DocumentFactory();
//创建一个文档实例
Document document = factory.createDocument();
//创建根节点
Element root = document.addElement("线标识");
//创建元素节点
Element book1 = root.addElement(line);
Element book2 = root.addElement(qb);
Element book3 = root.addElement(xLine);
Element book4 = root.addElement(cz);
Element book5 = root.addElement(tz);
//创建子元素
Element e1 = book1.addElement("直线最大值");
Element e2 = book2.addElement("铅笔最大值");
Element e3 = book3.addElement("虚线最大值");
Element e4 = book4.addElement("窜组最大值");
Element e5 = book5.addElement("通组最大值");
//为子元素赋值
e1.setText(""+l);
e2.setText(""+q);
e3.setText(""+xx);
e4.setText(""+c);
e5.setText(""+t);
//输出
OutputFormat format = new OutputFormat(" ",true,"GBK");
try {
//写入如文件流
FileWriter fw = new FileWriter(xmlFileName);
//写入xml
XMLWriter writer = new XMLWriter(fw,format);
//写入文档
writer.write(document);
//关闭流
fw.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
public static void main(String[] args){
//new CreateXml().create("lib/bs.xml","直线","铅笔","虚线","窜组","通组",5,7,6,9,5);
}
}
2.读取信息的类
package com.gyhq.tools;
import java.io.File;
import java.util.*;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class ReadXml {
public static String line;
public static String qb;
public static String xLine;
public static String cz;
public static String tz;
public void read(String fileName) throws Exception {
//创建一个xml读取器
SAXReader reader = new SAXReader();
//读取文件
//路径,现在4。xml是直接放在项目的根目录下Document document = reader.read(new File("4.xml"));
//若不是放在根目录下,那么就要指定一个路径,避免出错
String path = fileName;
//Document是文档
Document document = reader.read(new File(path));
//获取根元素
Element element = document.getRootElement();
element(element);
}
//递归取出所有元素
public void element(Element element){
//System.out.println("元素: "+element.getName());
//如果只是一个普通的元素没有子元素的,就直接输出
if(element.isTextOnly()==true){
//System.out.println("元素 名称: "+element.getName()+"||||"+"元素内容:"+element.getText());
if(element.getName().equals("直线最大值")){
line = element.getText();
//System.out.println(line);
}else if(element.getName().equals("铅笔最大值")){
qb = element.getText();
//System.out.println(qb);
}else if(element.getName().equals("虚线最大值")){
xLine = element.getText();
//System.out.println(xLine);
}else if(element.getName().equals("窜组最大值")){
cz = element.getText();
//System.out.println(cz);
}else if(element.getName().equals("通组最大值")){
tz = element.getText();
//System.out.println(tz);
}
}else{
//如果里面还有字元素的,那么就把它里面的内容输出
List elements = element.elements();
int size = elements.size();
for(int i=0;i<size;i++){
Element emt = (Element)elements.get(i);
//System.out.println("元素:"+emt.getName());
//递归遍历出所有的元素
element(emt);
//某一个元素的所有属性列出来
arr(emt);
}
}
}
/**
* 获取属性的方法
* @param element
*/
public void arr(Element element){
//取出所有的属性,放在list中
List att = element.attributes();
int size = att.size();
for(int i=0;i<size;i++){
//依次取出属性
Attribute attb = (Attribute)att.get(i);
//输出元素名称,属性名称和属性内容
///System.out.println("元素名称"+element.getName()+" 属性名称:"+attb.getName()+"属性内容:"+attb.getValue());
}
}
public static void main(String[] args){
try {
new ReadXml().read("lib/000.xml");
} catch (Exception e){
e.printStackTrace();
}
}
}
这样就很方便的取到标识的最大值,然后下次接着画图的时候,序号标识就会连续的,达到了很好的效果
1.创建xml的类
package com.gyhq.tools;
import java.io.FileWriter;
import java.io.IOException;
import org.dom4j.Document;
import org.dom4j.DocumentFactory;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
public class CreateXml {
public void create(String xmlFileName,String line,String qb,String xLine,String cz,String tz,Integer l,Integer q,Integer xx,Integer c,Integer t){
//创建一个解析xml的工厂实例
DocumentFactory factory = new DocumentFactory();
//创建一个文档实例
Document document = factory.createDocument();
//创建根节点
Element root = document.addElement("线标识");
//创建元素节点
Element book1 = root.addElement(line);
Element book2 = root.addElement(qb);
Element book3 = root.addElement(xLine);
Element book4 = root.addElement(cz);
Element book5 = root.addElement(tz);
//创建子元素
Element e1 = book1.addElement("直线最大值");
Element e2 = book2.addElement("铅笔最大值");
Element e3 = book3.addElement("虚线最大值");
Element e4 = book4.addElement("窜组最大值");
Element e5 = book5.addElement("通组最大值");
//为子元素赋值
e1.setText(""+l);
e2.setText(""+q);
e3.setText(""+xx);
e4.setText(""+c);
e5.setText(""+t);
//输出
OutputFormat format = new OutputFormat(" ",true,"GBK");
try {
//写入如文件流
FileWriter fw = new FileWriter(xmlFileName);
//写入xml
XMLWriter writer = new XMLWriter(fw,format);
//写入文档
writer.write(document);
//关闭流
fw.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
public static void main(String[] args){
//new CreateXml().create("lib/bs.xml","直线","铅笔","虚线","窜组","通组",5,7,6,9,5);
}
}
2.读取信息的类
package com.gyhq.tools;
import java.io.File;
import java.util.*;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class ReadXml {
public static String line;
public static String qb;
public static String xLine;
public static String cz;
public static String tz;
public void read(String fileName) throws Exception {
//创建一个xml读取器
SAXReader reader = new SAXReader();
//读取文件
//路径,现在4。xml是直接放在项目的根目录下Document document = reader.read(new File("4.xml"));
//若不是放在根目录下,那么就要指定一个路径,避免出错
String path = fileName;
//Document是文档
Document document = reader.read(new File(path));
//获取根元素
Element element = document.getRootElement();
element(element);
}
//递归取出所有元素
public void element(Element element){
//System.out.println("元素: "+element.getName());
//如果只是一个普通的元素没有子元素的,就直接输出
if(element.isTextOnly()==true){
//System.out.println("元素 名称: "+element.getName()+"||||"+"元素内容:"+element.getText());
if(element.getName().equals("直线最大值")){
line = element.getText();
//System.out.println(line);
}else if(element.getName().equals("铅笔最大值")){
qb = element.getText();
//System.out.println(qb);
}else if(element.getName().equals("虚线最大值")){
xLine = element.getText();
//System.out.println(xLine);
}else if(element.getName().equals("窜组最大值")){
cz = element.getText();
//System.out.println(cz);
}else if(element.getName().equals("通组最大值")){
tz = element.getText();
//System.out.println(tz);
}
}else{
//如果里面还有字元素的,那么就把它里面的内容输出
List elements = element.elements();
int size = elements.size();
for(int i=0;i<size;i++){
Element emt = (Element)elements.get(i);
//System.out.println("元素:"+emt.getName());
//递归遍历出所有的元素
element(emt);
//某一个元素的所有属性列出来
arr(emt);
}
}
}
/**
* 获取属性的方法
* @param element
*/
public void arr(Element element){
//取出所有的属性,放在list中
List att = element.attributes();
int size = att.size();
for(int i=0;i<size;i++){
//依次取出属性
Attribute attb = (Attribute)att.get(i);
//输出元素名称,属性名称和属性内容
///System.out.println("元素名称"+element.getName()+" 属性名称:"+attb.getName()+"属性内容:"+attb.getValue());
}
}
public static void main(String[] args){
try {
new ReadXml().read("lib/000.xml");
} catch (Exception e){
e.printStackTrace();
}
}
}
这样就很方便的取到标识的最大值,然后下次接着画图的时候,序号标识就会连续的,达到了很好的效果