使用 xml 保存通讯录信息

来源:互联网 发布:公司网站数据库在哪里 编辑:程序博客网 时间:2024/05/29 16:19

保存信息的方式有很多种,一般都是用数据库。
但是 JSON,txt,xml也可以保存信息,但是不推荐
前阵子研究了一下 xml,为了掌握对应知识,顺便使用 xml 做了一个简单的增删改查测试
——学生通讯录系统,就一个类,很简单明了的
下面分享代码,注意还要导入对应的 xml 架包才能运行

package cat;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.io.Writer;import java.util.ArrayList;import java.util.List;import java.util.Scanner;import org.dom4j.Document;import org.dom4j.DocumentException;import org.dom4j.DocumentHelper;import org.dom4j.Element;import org.dom4j.io.OutputFormat;import org.dom4j.io.SAXReader;import org.dom4j.io.XMLWriter;import org.junit.Test;/* * 说明: * Ⅰ:简化版通讯录,联系人tel,qq,email,address 等信息的添加,同理 * Ⅱ:只采用了一个main方法 * Ⅲ:所用的各项核心知识:① 集合List *                                     ②xml * Ⅳ:优点:想出使用null判断读取到终点 * Ⅴ:缺点:数据写入xml生硬 * */public class Connect {      // 点单      static int choice = 0;      // 表单      static List<String> list = new ArrayList<String>();      // 联系人信息(简略)      static String name;      static String sex;      // 索引      static int index;      @Test      public void cun() throws IOException,                  DocumentException {            // 使用无限循环,实现来回点菜单            while (true) {                  // 主菜单与点单                  System.out.println("");                  System.out.println("===================");                  System.out.println("-------main-------");                  System.out.println("--1.显示所有联系人-");                  System.out.println("--2.添加一个联系人-");                  System.out.println("--3.删除一个联系人-");                  System.out.println("--4.修改一个联系人-");                  System.out.println("------5.save------");                  System.out.println("------6.get------");                  System.out.println("===================");                  System.out.print("请选择菜单:");                  Scanner in = new Scanner(System.in);                  choice = in.nextInt();                  // switch创建菜单                  switch (choice) {                  case 1:                        // 使用增强for循环输出所有的信息                        for (String str : list) {                              System.out.println(str);                        }                        break;                  case 2:                        // 键盘输入新人信息                        System.out.println("--------add--------");                        System.out.println("name:");                        name = in.next();                        System.out.println("sex:");                        sex = in.next();                        // 加入表单                        list.add(name);                        list.add(sex);                        break;                  case 3:                        System.out.println("输入要删除的人的名字");                        name = in.next();                        // 有则返回索引,没有则返回-1                        index = list.indexOf(name);                        if (index == -1) {                              System.out.println("没有该联系人");                        } else {                              // 删除该联系人一系列信息,注意index会发送变化,故删除的index不变                              list.remove(index);                              list.remove(index);                        }                        System.out.println("-------delete--------");                        break;                  case 4:                        System.out.println("-------change--------");                        System.out.println("-输入要修改的人的名字-");                        // copy来自delete                        name = in.next();                        index = list.indexOf(name);                        if (index == -1) {                              System.out.println("----没有该联系人");                        } else {                              // 删除该联系人一系列信息                              list.remove(index);                              // 注意name,sex的index会发送变化,即下面sex的index取代上面name的index,故删除sex的index不变                              list.remove(index);                              System.out.println("----请重新输入信息----");                              // copy来自add                              System.out.println("name:");                              name = in.next();                              System.out.println("sex:");                              sex = in.next();                              // 加入表单                              list.add(name);                              list.add(sex);                              System.out.println("-------修改完毕------");                        }                        break;                  case 5:                        System.out.println("--------save---------");                        // 创建根元素对象,创建Document对象,并指定根元素                        Element rootElement = DocumentHelper                                    .createElement("person-list");                        Document document = DocumentHelper.createDocument(rootElement);                        Element person = null;                        for (int i = 0, j = 0, k = 1; i < list.size(); i++, j++, k++) {                              if (j % 2 == 0) {                                    // 添加person元素                                    person = DocumentHelper.createElement("person"); // 创建元素                                    rootElement.add(person); // 把此元素添加到根元素中                              }                              if (k % 2 == 0) {                                    person.addElement("sex").setText(list.get(i));                              } else {                                    person.addElement("name").setText(list.get(i));                              }                        }                        // 1,输出格式                        OutputFormat format = OutputFormat.createPrettyPrint(); // 漂亮的格式,方便阅读                        // OutputFormat format = OutputFormat.createCompactFormat(); //                        // 压缩的格式,一般传输数据时使用。                        // 2,写文件的编码问题                        OutputStream outputStream = new FileOutputStream("connect.xml");                        Writer writer = new OutputStreamWriter(outputStream, "utf-8"); // 指定写文件的编码(真实的文件存储编码)                        format.setEncoding("utf-8"); // 在xml的第一行的声明中的encoding属性的值,要与xml文件的真实编码一致                        // 3,使用XMLWriter工具类写XML                        XMLWriter xmlWriter = new XMLWriter(writer, format);                        // 4,执行写动作                        xmlWriter.write(document);                        // 5,释放资源                        xmlWriter.close();                        System.out.println("-------保存完毕-------");                        break;                  case 6:                        System.out.println("---------get----------");                        list.removeAll(list);                        //来自开源中国启发                    SAXReader reader = new SAXReader();                    Document document1 = reader.read("connect.xml");                    //我自己的思考方案:使用null判别!!!                    for(int i=1;document1.selectSingleNode("/person-list/person["+i+"]/name")!=null;i++){                          org.dom4j.Node selectSingleNode =document1.selectSingleNode("/person-list/person["+i+"]/name");                          String text = selectSingleNode.getText();//                        System.out.println(text);                          list.add(text);                          selectSingleNode =document1.selectSingleNode("/person-list/person["+i+"]/sex");                          text = selectSingleNode.getText();//                        System.out.println(text);                          list.add(text);                    }                        System.out.println("-------读取完毕-------");                        break;                  default:                        System.out.println("--------default-------");                        System.out.println("--输入错误请重新输入---");                        break;                  }            }      }}
原创粉丝点击