-
properties,xml,yaml配置文件解析
java中,常见几种配置文件有:.properties
,.xml
,.yml
,spring项目中对这些类型的配置文件通常有现成可用的封装,下面用手动解析的方式来操作这些类型配置文件;
首先idea创建项目:
根目录下创建配置文件:application.properties
,和测试类Test.java
application.properties
配置文件中,设置几个基础配置项:
Test.java
中编写readFromProperties()
方法解析文件:
public static Map readFromProperties() {
Map result = new HashMap<>();
Properties properties = new Properties();
try (FileInputStream inputStream = new FileInputStream("read-config/application.properties")) {
properties.load(inputStream);
} catch (Exception e) {
e.printStackTrace();
}
if (!properties.keySet().isEmpty()) {
for (Object key : properties.keySet()) {
result.put(key.toString(), properties.getProperty(key.toString()));
}
}
return result;
}
在application.properties
同级目录下创建xml配置文件config.xml
,并写入简单配置信息:
Test.java
中编写readFromXml()
方法解析文件:
public static Map readFromXml() {
Map result = new HashMap<>();
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder documentBuilder = factory.newDocumentBuilder();
Document document = documentBuilder.parse(new File("read-config/config.xml"));
result = node(document);
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
private static Map node(Node node) {
Map result = new HashMap<>();
NodeList childNodes = node.getChildNodes();
for (int i = 0; i < childNodes.getLength(); i++) {
Node item = childNodes.item(i);
//元素节点-递归
if (item.getNodeType() == Node.ELEMENT_NODE) {
result.putAll(node(item));
}
//文本节点-添加map
else if (item.getNodeType() == Node.TEXT_NODE
&& null != item.getNodeValue()
&& !"".equals(item.getNodeValue().trim())
&& !"\n".equals(item.getNodeValue().trim())) {
result.put(item.getParentNode().getNodeName(), item.getNodeValue());
}
}
return result;
}
代码分析:
xml解析主要用到javax.xml.parsers
包下的两个类:DocumentBuilderFactory
和DocumentBuilder
,通过documentBuilder.parse(new File("read-config/config.xml"))
方法解析xml文件为Document对象。接着用方法node(Node node)
递归Document对象各节点到Map对象。Document本身也是Node对象
在application.properties
同级目录下创建yaml配置文件config.yml
,并写入简单配置信息:
由于jdk没有提供yaml解析工具,需要手动导入解析库,这里用的库是:snakeyaml-1.29.jar
通过snakeyaml库,可以解析yaml配置文件为map或者对象。
该工具库下载地址参考:https://mvnrepository.com/artifact/org.yaml/snakeyaml
解析到Map
public static void readFromYml2Map() {
try (FileReader reader = new FileReader("read-config/config.yml")) {
Yaml yaml = new Yaml();
Object load = yaml.load(reader);
if (load instanceof Map) {
Map
解析为对象
public static void readFromYml2Entity() {
try (FileReader reader = new FileReader("read-config/config.yml")) {
Yaml yaml = new Yaml();
ConfigEntity entity = yaml.loadAs(reader, ConfigEntity.class);
System.out.println("======");
System.out.println(entity);
System.out.println("======");
} catch (Exception e) {
e.printStackTrace();
}
}
以上就是properties,xml,yaml三种配置文件解析的方法,这三种配置文件个人建议是简单的配置用properties,层次结构复杂的配置建议用yaml,xml虽然结构清晰但是配置没yaml简洁可根据情况取舍。
- properties .properties配置文件可以通过jdk中的java.util.Properties类进行读取和解析,注意application.properties文件路径。
- xml 打印结果:
- yaml 代码说明:解析到Map核心方法是通过yaml.load(reader),该方法将会返回一个Map对象。输出结果如下:代码说明:解析到对象核心方法是通过yaml.loadAs(reader, ConfigEntity.class)。输出结果如下:
- 总结
测试:
尊重原创,转载请标明出处,谢谢