txt文件,properties(属性)文件,XMl文件
txt与properties与XML的区别
当这些文件存储单个关系数据时, 普通文件 无法存储 关系数据,而properties属性文件以键值对形式存储就很方便,XML文件也可以 见图1
但储存多个用户就不行了,XML更适合, 见图2
properties集合
properties 代表属性文件这一类型
load:加载,story储存
properties读属性文件
//掌握properties的基本用法 @org.junit.Test
public void test() throws IOException { // 1.创建一个properties对象 Properties properties = new Properties(); System.out.println(properties); // 2.加载属性文件数据到properties对象里 properties.load(new FileReader(new File("E:\\JavaSE_Code_64\\day11\\users.properties"))); // 3. 查看properties全部数据 System.out.println(properties);
// 4.根据键找值 ,查找张无忌的密码 System.out.println(properties.getProperty("张无忌"));
// 5. 获取所有的键集合 Set<String> names = properties.stringPropertyNames(); System.out.println(names); System.out.println("---------------------------"); // 6. 查看所有的数据 for (String name : names) { String pw = properties.getProperty(name); System.out.println(name+":"+pw); } System.out.println("---------------------------"); // 使用 forEach properties.forEach((k,v)-> { System.out.println(k+"-->"+v);});
}
properties写属性文件
注意连通输出流到属性文件,第二个参数是注释信息
@org.junit.Test
public void test2() throws IOException {
// 1, 创建一个properties对象,用于读写属性文件 Properties properties = new Properties(); //2. 存一个键值对数据 properties.setProperty("张三","zhangs123");
// 3.把 properties对象的键值对数据输出到属性文件去 properties.store(new FileWriter("E:\\JavaSE_Code_64\\day11\\users2.properties"),"user&password"); }
XML文件
概述
XML:可扩展标记语言
本质是是一种数据的格式,可以用来存储复杂的数据结构,和数据关系
应用场景: 经常用来作为系统的配置文件;或者作为一种特殊的数据结构,在网络中进行传输
特点
- XML的标签一般是成对出现的
- XML只有一个根标签
- XML可以有属性值比如id,name等
- XML的标签可以自定义
- 如果一个文件中放的是XML数据,那么这个文件就是XML文件,后缀一般写.xml
idea创建xml文件
file文件,后缀xml就行
xml语法规则
可以渲染到浏览器
<?xml version="1.0" encoding="UTF-8" ?>
<!--XML文件的台头声明 ,版本级别,及编码格式 ,注意该声明必须在第一行,哪怕第一行是注释也不行-->
<!--根标签只有一个-->
<users> <user id="1"> <name>张无忌</name> <password>zhangwj123 </password> <data> <!-- 3<5 && 8>6 --> 3<5&&8>6 <!-- 还可以这样写--> <![CDATA[ 3<5 && 8>6 ]]> </data> </user> <user id="2"> <name>赵敏</name> <password>zhaom123</password> </user> <user id="3"> <name>金毛狮王</name> <password>jingmsw123</password> </user>
</users>
应用场景
Xml作为网络通信
Dom4j
使用
一般用Dom4j工具解析xml文件
Dom4j有个工具SAXReader, 该类的对象可以将解析的xml文档一下子读取到内存中去,把xml文件包装成一个Document对象 ,就可以使用Document对象获取里面的数据了
Dom4j方法
Element 方法
注意 拿数据,只能一层一层的拿,自上而下
<?xml version="1.0" encoding="UTF-8" ?>
<!--XML文件的台头声明 ,版本级别,及编码格式 ,注意该声明必须在第一行,哪怕第一行是注释也不行-->
<!--根标签只有一个-->
<users> <user id="1"> <name>张无忌</name> <password>zhangwj123 </password> <data> <!-- 3<5 && 8>6 --> 3<5&&8>6 <!-- 还可以这样写--> <![CDATA[ 3<5 && 8>6 ]]> </data> </user> <user id="2"> <name>赵敏</name> <password>zhaom123</password> </user> <user id="3"> <name>金毛狮王</name> <password>jingmsw123</password> </user> <peoper>幸福安康</peoper>
</users>
获取所有的一级标签和二级标签
//获得一级二级所有的标签
@Test
public void test2() throws DocumentException { //1. 使用SAXReader工具解析xml文件到内存中去 SAXReader saxReader = new SAXReader(); //2. 将xml文件包装成一个document对象 Document document = saxReader.read("E:\\JavaSE_Code_64\\day11\\user.xml"); //3. 获取根标签 Element rootElement = document.getRootElement(); //4. 获取根标签下一级所有标签 List<Element> elements = rootElement.elements(); for (Element firstElement : elements) { System.out.println(firstElement.getName()); //5. 获得二级所有标签 for (Element secondElement : firstElement.elements()) { System.out.println(" " + secondElement.getName()); } }
}
- 获取指定索引的标签,
- 通过id名,获取其属性/属性值
- 获取标签的文本
//获取指定根元素下的指定二级目录的值
@Test
public void test3() throws DocumentException { //1. 解析xml文件成一个document对象 //1.1 创建解析器对象 SAXReader saxReader = new SAXReader(); //1.2 使用解析器将xml读到内存,并包装成一个document对象 Document document = saxReader.read("E:\\JavaSE_Code_64\\day11\\user.xml"); //2.获取根元素 Element rootElement = document.getRootElement(); System.out.println(rootElement.getName()); //users //3.定位到根下一级标签的赵敏的user属性 Element firstElement = rootElement.elements().get(1); //user //4. 直接获得其name和pw属性值 System.out.println(firstElement.elementText("name"));//赵敏 System.out.println(firstElement.elementText("password"));//zhaom123 //5. 获取其user的id值 System.out.println(firstElement.attributeValue("id"));//2 for (Element element : firstElement.elements()) { System.out.println(element.getText()); //赵敏 zhaom123 }
}
根据某标签获取其指定子标签,及文本内容
// 快速获取标签文本
@Test
public void test4() throws DocumentException { //1. 解析xml文件成一个document对象 //1.1 创建解析器对象 SAXReader saxReader = new SAXReader(); //1.2 使用解析器将xml读到内存,并包装成一个document对象 Document document = saxReader.read("E:\\JavaSE_Code_64\\day11\\user.xml"); //2.获取根元素 Element rootElement = document.getRootElement(); //3. 获取指定标签 Element peoper = rootElement.element("peoper"); //4.获得指定标签的文本 System.out.println(peoper.getText()); //幸福安康 }
获取其标签文本内容
//获取元素的属性信息
@Test
public void test5() throws DocumentException { //1. 解析xml文件成一个document对象 //1.1 创建解析器对象 SAXReader saxReader = new SAXReader(); //1.2 使用解析器将xml读到内存,并包装成一个document对象 Document document = saxReader.read("E:\\JavaSE_Code_64\\day11\\user.xml"); //2.获取根元素 Element rootElement = document.getRootElement(); //获取第三组user标签 Element element = rootElement.elements().get(2); //获取第三组user标签下的id属性 Attribute id = element.attribute("id"); //获取id的名称 System.out.println(id.getName());//id //获取其id属性的值 System.out.println(id.getText());//3 System.out.println(id.getValue());//3
}
获取某标签下通过属性名查找其子标签的文本内容
//获取某元素下子元素的文本内容 ,即取出去掉前后空格
@Test
public void test6() throws DocumentException { //1. 解析xml文件成一个document对象 //1.1 创建解析器对象 SAXReader saxReader = new SAXReader(); //1.2 使用解析器将xml读到内存,并包装成一个document对象 Document document = saxReader.read("E:\\JavaSE_Code_64\\day11\\user.xml"); //2.获取根元素 Element rootElement = document.getRootElement(); //获取第二个user标签 Element element = rootElement.elements().get(0); //获取第二个user标签下name的值 System.out.println(element.elementText("name")); //张无忌 //获取第二个user标签下的值value System.out.println(element.elementText("password"));//zhangwj123 // 取出元素文本内容,去除前后空格 System.out.println(element.elementTextTrim("data")); //3<5&&8>6 3<5 && 8>6
}
XMl文件的创建
使用Stringbuilder拼接一个xml文件,先拼接内容,再使用缓冲输出流写到指定的xml文件
//使用Stringbuilder拼接一个xml文件,先拼接内容,再使用缓冲输出流写到指定的xml文件
@Test
public void test1() { StringBuilder sb = new StringBuilder(); sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n"); sb.append("<users>\n"); sb.append(" <user>").append(" id=").append("\"1\"").append(">\n"); sb.append(" <name>").append("张无忌").append("</name>\n"); sb.append(" <password>").append("zhangwj123").append("</password>\n"); sb.append(" </user>\n"); sb.append(" <user>").append(" id=").append("\"2\"").append(">\n"); sb.append(" <name>").append("赵敏").append("</name>\n"); sb.append(" <password>").append("zhaom123").append("</password>\n"); sb.append(" </user>\n"); sb.append(" <user>").append(" id=").append("\"3\"").append(">\n"); sb.append(" <name>").append("金毛狮王").append("</name>\n"); sb.append(" <password>").append("jingmsw123").append("</password>\n"); sb.append(" </user>\n"); sb.append("</users>\n"); //定义写在try()里面就不用关流了 try ( BufferedWriter bw = new BufferedWriter(new FileWriter("E:\\JavaSE_Code_64\\day11\\createXml.xml")); ) { //写入拼接后的xml内容到xml文件 bw.write(sb.toString()); } catch (IOException e) { e.printStackTrace(); } }
<?xml version="1.0" encoding="UTF-8" ?>
<users> <user> id="1"> <name>张无忌</name> <password>zhangwj123</password> </user> <user> id="2"> <name>赵敏</name> <password>zhaom123</password> </user> <user> id="3"> <name>金毛狮王</name> <password>jingmsw123</password> </use
XMl约束文档
专门用来限制xml书写格式的文档,比如:限制标签,属性应该怎么写
约束文档的分类
- DTD文档
- Schema文档
DTD文档
例子
将约束文档导入xml文件
- 第一行限制根标签必须是书架,子元素必须是一个+个书标
- 书标签里面有书名,作者,售价这些标签
- 书名,作者,售价这些标签可以写内容
schema约束文档