<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    春風博客

    春天里,百花香...

    導航

    <2008年1月>
    303112345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    統計

    公告

    MAIL: junglesong@gmail.com
    MSN: junglesong_5@hotmail.com

    Locations of visitors to this page

    常用鏈接

    留言簿(11)

    隨筆分類(224)

    隨筆檔案(126)

    個人軟件下載

    我的其它博客

    我的鄰居們

    最新隨筆

    搜索

    積分與排名

    最新評論

    閱讀排行榜

    評論排行榜

    用于將對象持久化到XML文件以及讀取,刪除的持久化類(dom4j,xstream實現)

    弄著玩的,不看也罷。

    在此類的幫助下,你不必關注細節就能將對象持久化到XML文件以及讀取,刪除,只有更新麻煩一點,你需要先刪除再添加。

    具體代碼:
    XmlPersistence類:

    package com.sitinspring.persist;

    import java.io.File;
    import java.io.FileWriter;
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;

    import org.dom4j.Document;
    import org.dom4j.DocumentHelper;
    import org.dom4j.Element;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.SAXReader;
    import org.dom4j.io.XMLWriter;

    import com.thoughtworks.xstream.XStream;

    /**
     * 用于將任意對象持久化到XML文件及其逆過程的持久化類(dom4j,xstream實現)
     * 
     * 
    @author: sitinspring(junglesong@gmail.com)
     * @date: 2008-1-8
     
    */

    public class XmlPersistence<T> {
        
    // XML文件名
        private final String xmlFile;

        
    // XML 文檔對象
        private Document document;

        
    // 根節點
        private Element root;

        
    // 根節點名稱
        private final String rootText = "root";

        
    /**
         * 單參數構造函數,指定存儲的文件名
         * 
         * 
    @param xmlFile
         
    */

        
    public XmlPersistence(String xmlFile) {
            
    this.xmlFile = xmlFile;

            init();
        }


        
    /**
         * 添加一個對象對應的節點到XML文件
         * 
         * 
    @param type
         
    */

        
    public void add(T type) {
            
    // 將對象轉化為XML文字
            XStream xStream = new XStream();
            String xml 
    = xStream.toXML(type);

            
    try {
                
    // 將轉化后的文字變成節點
                Document docTmp = DocumentHelper.parseText(xml);
                Element typeElm 
    = docTmp.getRootElement();

                
    // 添加這個節點
                root.add(typeElm);

                
    // 保存文件
                saveDocumentToFile();
            }
     catch (Exception ex) {
                ex.printStackTrace();
            }

        }


        
    /**
         * 從XML文件中,刪除一個對象對應的節點
         * 
         * 
    @param type
         
    */

        
    public void del(T type) {
            
    // 將對象轉化為XML文字
            XStream xStream = new XStream();
            String xml 
    = xStream.toXML(type);

            
    try {
                List nodes 
    = root.elements();

                
    for (Iterator it = nodes.iterator(); it.hasNext();) {
                    Element companyElm 
    = (Element) it.next();

                    
    // 查找,節點全文相同必定元素相同
                    if (companyElm.asXML().equals(xml)) {
                        
    // 刪除原有節點
                        root.remove(companyElm);

                        
    // 保存文件
                        saveDocumentToFile();
                        
    return;
                    }

                }

            }
     catch (Exception ex) {
                ex.printStackTrace();
            }

        }


        
    /**
         * 從XML中取得所有對象
         * 
         * 
    @return
         
    */

        
    public List<T> loadAll() {
            List
    <T> retval = new ArrayList<T>();

            
    try {
                List nodes 
    = root.elements();

                
    for (Iterator it = nodes.iterator(); it.hasNext();) {
                    
    // 取得每個節點
                    Element companyElm = (Element) it.next();
                    
                    
    // 將節點轉化為對象
                    XStream xStream = new XStream();
                    T t 
    = (T) xStream.fromXML(companyElm.asXML());

                    retval.add(t);
                }

            }
     catch (Exception ex) {
                ex.printStackTrace();
            }


            
    return retval;
        }


        
    // 初始化文檔對象及根節點
        private void init() {
            File file 
    = new File(xmlFile);

            
    try {
                
    // 判斷文件的存在以增強程序的健壯性
                if (file.exists()) {
                    
    // 文件存在,直接從文件讀取文檔對象
                    SAXReader reader = new SAXReader();
                    document 
    = reader.read(file);
                    root 
    = document.getRootElement();
                }
     else {
                    
    // 文件不存在,創建文檔對象
                    document = DocumentHelper.createDocument();
                    root 
    = document.addElement(rootText);// 創建根節點
                }

            }
     catch (Exception ex) {
                ex.printStackTrace();
            }

        }


        
    /**
         * 將Document寫回文件
         * 
         
    */

        
    private void saveDocumentToFile() {
            
    try {
                OutputFormat format 
    = OutputFormat.createPrettyPrint();
                format.setEncoding(
    "GBK"); // 指定XML編碼
                XMLWriter writer = new XMLWriter(new FileWriter(xmlFile), format);

                writer.write(document);
                writer.close();
            }
     catch (Exception ex) {
                ex.printStackTrace();
            }

        }

    }

    測試類及測試代碼:
    Company類:
    package com.sitinspring.domain;

    import java.util.Hashtable;
    import java.util.Iterator;
    import java.util.Map;

    /**
     * 領域對象-公司類
     * 
     * 
    @author sitinspring
     * 
     * @date 2007-12-30
     
    */

    public class Company {
        
    //     公司名
        private String name;

        
    // 成員哈希表
        private Map<String, Employee> staff;
        
        
    /**
         * 構造函數
         * 
    @param name
         
    */

        
    public Company(String name){
            
    this.name=name;
        }

        
        
    public String toString(){
            String retval
    ="公司:名稱="+name;
            
            
    if(staff != null){
                Iterator
    <Employee> iter=staff.values().iterator();
                retval
    +=" 雇員有:";
                
                
    while(iter.hasNext()){
                    Employee tmp
    =iter.next();
                    retval
    +=tmp.getName()+",";                
                }

            }

            
            
    return retval;
        }


        
    /**
         * 向成員哈希表中添加成員
         * 
         * 
    @param employee
         * 
    @return true:添加成功;false:有同名成員存在,添加失敗
         
    */

        
    public boolean add(Employee employee) {
            
    if (staff == null{
                staff 
    = new Hashtable<String, Employee>();
            }


            
    if (staff.containsKey(employee.getName())) {
                
    // 存在同名成員
                return false;
            }
     else {
                
    // 不存在同名成員
                staff.put(employee.getName(), employee);

                
    // 給member賦上自己的指針,以便讓成員示例能找到自己所在的公司
                employee.setCompany(this);

                
    return true;
            }

        }


        
    public String getName() {
            
    return name;
        }


        
    public void setName(String name) {
            
    this.name = name;
        }

    }


    測試類Employee:
    package com.sitinspring.domain;

    /**
     * 領域對象-雇員類
     * 
     * 
    @author sitinspring
     * 
     * @date 2007-12-30
     
    */

    public class Employee implements Comparable {

        
    private String name;// 姓名

        
    // 指向包含自己的公司的指針
        private Company company;
        
        
    public Employee(String name){
            
    this.name=name;
        }


        
    public int compareTo(Object obj) {
            Employee another 
    = (Employee) obj;

            
    return this.name.compareTo(another.name);
        }


        
    public String getName() {
            
    return name;
        }


        
    public void setName(String name) {
            
    this.name = name;
        }


        
    public Company getCompany() {
            
    return company;
        }


        
    public void setCompany(Company company) {
            
    this.company = company;
        }

    }

    測試代碼:
    1.存儲過程
    // 1.存儲過程
            Company google=new Company("google");
            google.add(
    new Employee("Andy"));
            google.add(
    new Employee("Bill"));
            
            Company microsoft
    =new Company("Microsoft");
            microsoft.add(
    new Employee("Cindy"));
            microsoft.add(
    new Employee("Douglas"));
            
            XmlPersistence
    <Company> persistCmp=new XmlPersistence<Company>("company.xml");
            persistCmp.add(google);
            persistCmp.add(microsoft);

    2.讀取過程
            XmlPersistence<Company> persistCmp=new XmlPersistence<Company>("company.xml");
            List
    <Company> ls=persistCmp.loadAll();
            
    for(Company company:ls){
                System.out.println(company);
            }

    3.刪除及更新過程
            // 3.刪除及更新過程
            Company google=new Company("google");
            google.add(
    new Employee("Andy"));
            google.add(
    new Employee("Bill"));
            
            Company microsoft
    =new Company("Microsoft");
            microsoft.add(
    new Employee("Cindy"));
            microsoft.add(
    new Employee("Douglas"));
            
            XmlPersistence
    <Company> persistCmp=new XmlPersistence<Company>("company.xml");
            persistCmp.add(google);
            persistCmp.add(microsoft);
            
            
    // 刪除一個公司
            persistCmp.del(microsoft);
            
            
    // 更新一個公司(先刪除舊的再添加新的)
            persistCmp.del(google);        
            google.setName(
    "谷歌");
            google.add(
    new Employee("sitinspring"));
            persistCmp.add(google);
            
            List
    <Company> ls=persistCmp.loadAll();
            
    for(Company company:ls){
                System.out.println(company);
            }


    代碼下載(請自行加入dom4j-1.6.1.jar,xpp3_min-1.1.3.4.O.jar,xstream-1.2.2.jar等三個包。):
    http://m.tkk7.com/Files/sitinspring/XmlPersistenceXstream20080109012751.rar

    posted on 2008-01-09 01:21 sitinspring 閱讀(2664) 評論(0)  編輯  收藏 所屬分類: Java基礎

    sitinspring(http://m.tkk7.com)原創,轉載請注明出處.
    主站蜘蛛池模板: 成人精品国产亚洲欧洲| 国产va免费精品| 亚洲Av无码乱码在线观看性色| 午夜成人无码福利免费视频| 久久久久久久久亚洲| 久久久久免费看黄A片APP| 免费无遮挡无遮羞在线看| 久久亚洲精品国产精品黑人| 大陆一级毛片免费视频观看| 成在线人视频免费视频 | 亚洲三级在线观看| 国产成人精品日本亚洲专区| 99在线精品免费视频九九视| 九九九国产精品成人免费视频| 亚洲国产韩国一区二区| 国产亚洲精品资在线| 久久久久久久久免费看无码| 久久免费精品视频| 在线观看亚洲专区| 亚洲成人黄色网址| 亚洲中久无码永久在线观看同| 在线观看av永久免费| 无码日韩精品一区二区三区免费 | 香港a毛片免费观看 | 亚洲视频在线不卡| 亚洲免费一区二区| 成人最新午夜免费视频| 久久国产精品免费观看| 国产午夜亚洲精品不卡免下载| 亚洲精品在线电影| 国产AV无码专区亚洲AV男同| 免费h黄肉动漫在线观看| 最近2019中文字幕免费直播| 久久久WWW免费人成精品| 亚洲第一se情网站| 国产91在线|亚洲| 91在线亚洲精品专区| 久久亚洲国产欧洲精品一| 亚洲 无码 在线 专区| 永久免费av无码网站大全| 很黄很色很刺激的视频免费|