我们常见的配置文件:
????????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
阳波
阳波
|