使用 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; } } }}
阅读全文
1 0
- 使用 xml 保存通讯录信息
- 使用XML保存程序需要的配置信息
- 使用xml保存KV配置信息操作类
- 【C语言】通讯录实现以及信息保存至文件。
- 实现一个通讯录并将信息保存到文本中
- 实现一个通讯录并将信息保存到文本中
- Android 保存信息到系统通讯录的实现
- 使用cookie保存信息
- 使用XML保存数据
- 使用startActivityForResult得到通讯录联系人信息
- 使用ContentProvider添加获取通讯录信息
- 用户登录信息保存为xml
- xml格式保存信息到文件
- dom4j保存信息到XML文件
- 使用session保存登录信息
- iOS 使用ContactsUI保存新联系人到系统通讯录
- iOS 保存到通讯录
- 通讯录sqlite数据库保存
- GAN学习笔记:MMGAN:Manifold-Matching Generative Adversarial Network
- 平常心
- 【java基础】19.网络编程
- js写排序的方法。
- [Office] 常用的一些快捷键 [持续更新]
- 使用 xml 保存通讯录信息
- js数组方法大全
- 693. Binary Number with Alternating Bits
- 选择一款大数据可视化展示工具,要几步?
- 杜绝假死,Tomcat容器做到自我保护,设置最大连接数
- Python 从入门到放弃(二)
- 加密,解密工具类
- python爬虫 如何解析json文件 json文件的解析提取和jsonpath的应用
- 基于图的图像分割(Graph-Based Image Segmentation)