为什么要用这些特殊文件:
方便存储多个用户的用户名密码等等。
特殊文件:
如果一个txt文件里存放的都是键值对数据,每个键值对占一行,也算是属性文件。
Properties:
1.是一个Map集合(键值对集合),但是我们一般不会当集合使用。
2.核心作用:Properties是用来代表属性文件的,通过Properties可以读写属性文件里的内容。
示例代码:
properties配置文件:
#以下是用户名和密码 admin=123456 张无忌=minmin 周芷若=wuji
package com.itheima.d1_properties;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Properties;
import java.util.Set;
public class PropertiesTest1 {
public static void main(String[] args) throws IOException {
Properties properties = new Properties();
properties.load(new FileReader("helloworld-app\\src\\users.properties"));
//对于properties文件,右击Copy Path 选择绝对路径,然后把D:\code\javasepro\\删掉,用相对路径即可。
System.out.println(properties);
//{admin=123456, 周芷若=wuji, 张无忌=minmin}
System.out.println(properties.getProperty("admin"));//用键获取值 123456
Set keys = properties.stringPropertyNames();//拿到所有键的集合
for (String key: keys) {
String value = properties.getProperty(key);
System.out.println(key+"----->"+value);
//admin----->123456
//周芷若----->wuji
//张无忌----->minmin
}
}
}
构造器同上,这里省略。
这里属性文件可以不用提前创建。
示例代码:
package com.itheima.d1_properties;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;
public class PropertiesTest2 {
public static void main(String[] args) throws IOException {
Properties properties = new Properties();
properties.setProperty("admin","123456");
properties.setProperty("张三","654321");
properties.store(new FileWriter("helloworld-app/src/users2.properties")
, "l save many users");//这个文件不需要提前创建
}
}
结果:
#l save many users #Wed Jan 17 15:32:39 CST 2024 张三=654321 admin=123456
可扩展标记语言
特点:
XML中的“<标签名>” 称为一个标签或一个元素,一般是成对出现的
XML中的标签名可以自己定义 (可扩展),但必须要正确的嵌套。
XML中只能有一个根标签
XML中的标签可以有属性
如果一个文件中放置的是XML格式的数据,这个文件就是XML文件,后缀一般要写成.xml。
IDEA创建xml文件:
xml的格式:
张无忌
男
minmin
3 < 2 && 5 > 4
4
]]>
很多人
敏敏
女
wuji
3 < 2 && 5 > 4
4
]]>
这里注意data和data1标签里的内容写法:
快捷写法:敲CD回车即可--------比特殊字符代替更简洁。
程序员并不需要自己写原始的IO流代码来解析XML,难度较大!也相当繁琐!
其实,有很多开源的,好用的,解析XML的框架,最知名的是: Dom4j(第三方研发的)
使用过程(详细解释):
打开下载Maven Repository: org.dom4j » dom4j » 2.1.3 (mvnrepository.com)https://mvnrepository.com/artifact/org.dom4j/dom4j/2.1.3点击jar开始下载:
下载完复制此文件,打开IDEA,右击你的项目-New-Directory,起名为lib,一般都起名为lib,点击lib,ctrl+v,把文件粘贴进来,右击jar包,点击Add as Library -> 点击ok即可。
类中导包使用,这个不用管,IDEA自动帮你导。
Dom4j解析思想:
Dom4j通过SAXReader解析器解析成Document文档,然后就可以获取到我们想要的内容了。
构造器和方法:
示例代码:
xml配置文件:
张无忌
男
minmin
3 < 2 && 5 > 4
4
]]>
很多人
敏敏
女
wuji
3 < 2 && 5 > 4
4
]]>
package com.itheima.d2_xml;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import java.util.List;
/**
* 掌握使用Dom4j框架解析XML文件
*/
public class Dom4JTest1 {
public static void main(String[] args) throws DocumentException {
SAXReader saxReader = new SAXReader();
//用相对路径
Document document = saxReader.read("helloworld-app\\src\\helloworld.xml");
//拿根元素
Element root = document.getRootElement();
System.out.println(root.getName());//users
//获取根元素下全部一级子元素
List elements = root.elements();
for (Element element : elements) {
System.out.println(element.getName());
}
//获取当前元素下的某个子元素
Element people = root.element("people");
System.out.println(people.getText());
//如果下面有很多子元素user,默认获取第一个
Element user = root.element("user");
System.out.println(user.elementText("name"));//张无忌
//获取元素属性信息
System.out.println(user.attributeValue("id"));//1
Element data = user.element("data");
System.out.println(data.getTextTrim());//取出文本去除前后空格
}
}
这里不建议使用Dom4j
推荐直接把程序里的数据拼接成XML格式 ,然后用IO流写出去 !
示例代码:
把数据写出到某个XML文件,这个文件不需要提前创建,会帮你自动创建。
package com.itheima.d2_xml;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
/**
* 目标:如何使用程序把数据写出到 XML文件中去。
*
*
* 从入门到跑路
* dlei
* 999.9
*
*/
public class Dom4JTest2 {
public static void main(String[] args) {
// 1、使用一个StringBuilder对象来拼接XML格式的数据。
StringBuilder sb = new StringBuilder();
sb.append("\r\n");
sb.append("\r\n");
sb.append("\t").append("从入门到跑路").append(" \r\n");
sb.append("\t").append("dlei").append(" \r\n");
sb.append("\t").append(999.99).append(" \r\n");
sb.append(" ");
try (BufferedWriter bw = new BufferedWriter(new FileWriter("helloworld-app\\src\\book.xml"));)
{
bw.write(sb.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
}