特殊文件
储存多个用户:用户名、密码、家乡、性别
例如 .properties .XML 文件
存储有关系的数据,做为系统的配置文件
作为信息进行传输
这些特殊文件,我们主要学什么?
了解他们的特点、作用
学习使用程序读取他们里面的数据
学习使用程序把数据存储到这些文件里
.properties
1、只能是键值对
2、键不能重复
3、文件后缀一般是.properties结尾的
Properties
是一个Map集合(键值对集合),但是我们一般不会当集合使用。
核心作用:Properties是用来代表属性文件的,通过Properties可以读写文件里的内容
使用Properties读取属性文件里键值对数据
构造器 | 说明 |
---|---|
public Properties() | 用于构建Properties集合对象(空容器) |
public void load(InputStream is) | 通过字节输入流,读取文件里的键值对数据 |
public void load(Reader reader) | 通过字符输入流,读取文件里的键值对数据 |
public String getProperty(String key) | 根据获取值(其实就是get方法的效果) |
public Set stringPropertyNames() | 获取全部键集合(其实就是ketSet方法的效果) |
import java.io.FileInputStream;
import java.io.FileReader;
import java.util.Properties;
import java.util.Set;public class PropertiesTest1 {public static void main(String[] args) throws Exception {//1、创建一个Properties的对象出来(键值对集合、空容器)Properties properties = new Properties();System.out.println(properties);//2、开始加载属性文件中的键值对数据porperties对象中去properties.load(new FileReader("C:\\Users\\Administrator\\IdeaProjects\\untitled\\src\\users.p" +"roperties"));System.out.println(properties);System.out.println(properties.getProperty("赵敏"));System.out.println(properties.getProperty("张无忌"));//4、遍历全部的键和值Set<String> keys = properties.stringPropertyNames();for (String key : keys) {String value = properties.getProperty(key);System.out.println(key+"---->"+value);}properties.forEach((k,v)->{System.out.println(k+"---->"+v);});}
}
import java.io.FileWriter;
import java.util.Properties;public class PropertiesTest2 {public static void main(String[] args) throws Exception {//1、创建Properties对象出来,先用它存储一些数据Properties prop=new Properties();Properties properties = new Properties();properties.setProperty("user.name","admin");properties.setProperty("zhangwuji","mimin");properties.setProperty("zhangcuishan","susu");properties.setProperty("yinsusu","mimi");//2、把properties对象中的键值对数据存入到属性文件夹中properties.store(new FileWriter("C:\\Users\\Administrator\\IdeaProjects\\untitled\\src\\users2.properties"),"i saved many users!");}
}
特殊文件.xml文件
xml(全称EXtensible Markup Language,可扩展标记语言)
XML特点
xml中的"<标签名>"称为一个标签或一个元素,一般是成对出现的
xml中的标签名可以自己定义(可扩展),但必须要正确嵌套。
xml中只能有一根标签。
xml中的标签可以有属性。
如果一个文件中放置的是XML格式的数据,这个文件就是XML文件,后缀一般要写成.xml
xml的创建
就是创建一个XML文件,要求文件的后缀必须使用xml,如hello_world.xml
XML的语法规则
XML文件的后缀名为:XML,文档声明必须是第一行
<?xml version="1.0" encoding="UTF-8" ?>version:XML默认的版本号码、该属性是必须存在的
encoding:本xml文件的编码
xml中可以定义注释信息:
xml中书写"<" , "&"等,可能会出现冲突,导致报错,此时可以用如下特殊字符替代。
< < 小于
>;> 大于
& & 和号
"; ” 引号
xml中可以写一个叫CDATA数据区:<![CDATA[..内容...]]>,里面的内容可以随便写。
XML的作用和应用场景
本质是一种数据格式,可以存储复杂的数据结构,和数据关系。
应用场景:经常用来作为系统的配置文件;或者作为一种特殊的数据结构,在网络中进行传输
解析XML文件
注意:程序员并不需要自己原始的IO流代码来解析XML,难度较大
其实,有很多开源的,好用的,解析XML的框架,最知名的是:DOM4j(第三方研发)
DOM4J解析XML文件的思想:文档对象模型
Dom4J解析XML-得到Document对象
SAReader: Domj4提供的解析器,可以认为是代表整个Dom4j框架
构造器 | 说明 |
---|---|
public SAXReader() | 构建Dom4J 的解析器对象 |
public Document read(String url) | 把XML文件读成Document对象 |
public Document(InputStream is) | 通过字节输入流读取XML |
Docmuent
方法名 | 说明 |
---|---|
Element getRootElement() | 获取根元素对象。 |
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;public class Dom4JTest1 {public static void main(String[] args) throws Exception {//1、创建一个Dom4J框架提供的解析对象SAXReader saxReader = new SAXReader();//2、使用saxReader对象把需要解析的XML文件读成一个Document对象。Document document = saxReader.read("C:\\Users\\Administrator\\IdeaProjects\\untitled\\src\\hollworld.xml");//3、从文档对象中解析XML文件的全部数据Element root = document.getRootElement();System.out.println(root.getName());}
}
Element 方法
方法名 | 说明 |
---|---|
public String getName() | 得到元素名字 |
public List elements() | 得到当前元素下所有子元素 |
public List elements(String name) | 得到当前元素下指定名字的子元素返回集合 |
public Element element(String name) | 得到当前元素下指定名字元素,如果有很多名字相同的返回第一个 |
public String attributeValue(String name) | 通过属性名直接得到属性值 |
public String elementText(元素子名) | 得到元素指定名称的子元素文本 |
public String getText() | 得到文本 |
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;import java.util.List;public class Dom4JTest1 {public static void main(String[] args) throws Exception {//1、创建一个Dom4J框架提供的解析对象SAXReader saxReader = new SAXReader();//2、使用saxReader对象把需要解析的XML文件读成一个Document对象。Document document = saxReader.read("C:\\Users\\Administrator\\IdeaProjects\\untitled\\src\\hollworld.xml");//3、从文档对象中解析XML文件的全部数据Element root = document.getRootElement();System.out.println(root.getName());//4、获取根元素下的全部一级子元素List<Element> elements=root.elements();System.out.println(root.getName());for(Element element:elements){System.out.println(element.getName());}//5、获取当前元素下的某个子元素Element people = root.element("people");System.out.println(people.getText());//如果下面有很多子元素user,默认获取第一个Element user = root.element("user");System.out.println(user.elementText("name"));//6、获取元素的属性信息System.out.println(user.attributeValue("id"));Attribute id= user.attribute("id");System.out.println(id.getName());System.out.println(id.getValue());List<Attribute> attributes = user.attributes();for(Attribute attribute : attributes){System.out.println(attribute.getName()+"="+attribute.getName());}//7、获取全部文本内容:获取当前元素的子元素文本值System.out.println(user.elementText("name"));System.out.println(user.elementText("地址"));System.out.println(user.elementTextTrim("地址"));System.out.println(user.elementText("password"));Element data = user.element("data");System.out.println(data.getText());System.out.println(data.getTextTrim());//取出文本出去前后空格}
}
如何使用程序把数据写出到XML文件中去?
不建议用dom4j做推荐直接把程序里的数据拼接成XML格式,然后用IO流写出去
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.nio.Buffer;/**目标 如何使用程序把数据写出到XML文件中去<?xml version="1.0" encoding="UTF-8"?><book><name>从入门到跑路</name><outhor>dlei</outhor><price>999.9</price></book>**/public class Dom4JTest4 {public static void main(String[] args) {//1、使用一个StringBuilder 对象来拼接XML格式的数据StringBuilder sb= new StringBuilder();sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");sb.append("<book>\r\n");sb.append("\t<name>").append("从入门到跑路").append("</name>\r\n");sb.append("\t<author>").append("dlei").append("</author>\r\n");sb.append("\t<price>").append(999.99).append("</price>\r\n");sb.append("<\book>");try(BufferedWriter bw = new BufferedWriter(new FileWriter("C:\\Users\\Administrator\\IdeaProjects\\untitled\\src\\users3.properties"))){bw.write(sb.toString());}catch(Exception e){e.printStackTrace();}}
}
补充知识:约束XML文件的编写
什么是约束XML文件的书写?
就是限制XML文件只能按照某种格式进行书写。
约束文档
专门用来限制XML书写格式的文档,比如:限制标签、属性应该怎么写。
DTD文档
Schema文档