我们常见的配置文件:
properties
josn
yaml
hocon
当然,我们web开发中使用的web.xml文件也是常使用的配置文件。
在Java中我们想要使用配置文件则需要用代码将文件解析出来。
在Java类中解析配置文件:
注意:该方式只能读取类路径下的配置文件,有局限但是如果配置文件在类路径下比较方便。
1 Properties p = new Properties();
2 // 使用ClassLoader加载properties配置文件生成对应的输入流
3 InputStream in = PropertiesMain.class.getClassLoader().getResourceAsStream("config/config.properties");
4 // 使用properties对象加载输入流
5 p.load(in);
6 //获取key对应的value值
7 p.getProperty(String key);
注意:该方式的优点在于可以读取任意路径下的配置文件
1 Properties p = new Properties();
2 // 使用InPutStream流读取properties文件
3 BufferedReader bufferedReader = new BufferedReader(new FileReader("E:/config.properties"));
4 p.load(bufferedReader);
5 // 获取key对应的value值
6 p.getProperty(String key);
此处代码使用的是java.util.ResourceBundle类直接解析资源,更为方便:
//使用java.util.ResourceBundle类来直接读取 路径名必须是包的全名加文件名,不需要文件的后缀名
ResourceBundle b = ResourceBundle.getBundle("com/comfig/jdbc");
//直接使用ResourceBundle工具类的getString方法就能得到资源信息
String name = b.getString("jdbc.url");
System.out.println(name);
代码输出:
jdbc:mysql://localhost:3306/test
java中并没有直接定义出解析的 类或者方法,我们就得借助外界的工具包:
解析xml文件的步骤:
package com.test;
import java.io.InputStream;
import java.util.List;
import javax.lang.model.element.Element;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import org.dom4j.tree.DefaultElement;public class Test {
public static void main(String[] args) throws DocumentException {
//找到配置文件,得到输入流
InputStream as = Test.class.getResourceAsStream("student.xml");
//导入jar包,实例化jar包SAXReader对象
SAXReader sa = new SAXReader();
//调用SAXReader对象的read方法参数为输入流 返回最高节点
Document d = sa.read(as);
//使用节点的selextNodes方法查找需要查找的节点 返回节点集合
List<DefaultElement> ln = d.selectNodes("students/student");
for (DefaultElement e : ln) {//遍历该集合
//asXML方法使节点看起来更清晰
System.out.println(e.asXML());
//得到该节点的属性个数
System.out.println(e.attributeCount());
//得到该节点的class属性值
System.out.println(e.attributeValue("class"));
//得到该节点的name子节点//返回单个节点Note 得到该节点的内容
System.out.println(e.selectSingleNode("name").getStringValue());
}
//得到是T264班的学生的节点
Node n = d.selectSingleNode("students/student[@class='T264']/name");
//打印该节点的内容
System.out.println(n.getStringValue());
}
}
上部分代码输出为:
<student id="1001">
<name>李洲</name>
<age>18</age>
<tel>119</tel>
</student>
1
null
李洲
<student id="1002" class="T264">
<name>阳波</name>
<age>38</age>
<tel>120</tel>
</student>
2
T264
阳波
阳波