一、Java中配置文件的三种配置位置及读取方式
Java中,配置文件可以存放在三个位置。
1、同包下的资源文件读取
将当前类同包下的db.properties资源文件转换成输入流
InputStream in = PropertiesDemo.class.getResourceAsStream("db.properties");
Properties p = new Properties();
p.load(in);
System.out.println(p.getProperty("uname"));
System.out.println(p.getProperty("upass"));
注:db.properties是资源文件,内容如下:
通过上面的获取uname与upass,我们成功的取到了两个值
2、将所有的资源文件放到根目录下
InputStream in = PropertiesDemo.class.getResourceAsStream("/db.properties");
Properties p = new Properties();
p.load(in);
System.out.println(p.getProperty("uname"));
System.out.println(p.getProperty("upass"));
跟第一点中相比,多了个“/”,斜杆“/”代表根目录,当然结果都是一样的,但是这样方便了很多,编译后所有的资源文件都会自动进WEB-INF下,所以第三种方式又比第二种要方便,就看你们习惯哪一种了。
3、直接将资源文件放到web-inf下
public class PropertiesServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext context = req.getServletContext();
InputStream in = context.getResourceAsStream("/WEB-INF/db.properties");
Properties p = new Properties();
p.load(in);
System.out.println(p.getProperty("uname"));
System.out.println(p.getProperty("upass"));
}
}
这一种就是直接把资源文件放到WEB-INF中,当然直接放到WEB-INF中是有点好处的,WEB-INF也是安全目录,其含义就是不能被外界访问。结果与第一种一样
二、 XML的作用
配置
*.properties
*.xml
注:*.properties文件
key=value
数据交换
xml
webservice
json
三、dom4j+xpath解析xml文件
properties文件的解析方式有java.util.properties这个类来完成
xml文件:应该有一个工具类来完成
解析方式也分为三种:
jdk/jdom
sax解析 由上往下解析
dom4j解析 由外到内解析
我们今天就来用dom4j+xpath来解析xml文件。注:xpath等同数据库的select语句
document.selectNodes(xpath);//查一组
document.selectSingleNode(xpath);//查单个
DOM由节点组成
Node
元素节点
属性节点
文本节点
xpath
/ 定位路径 在系统中建一个文件叫document/students/student/sid|name
@ 属性
students.xml中内容
我们要解析的就是students.xml,我们要在这里面解析出“小王”这个名字
代码如下:
public static void main(String[] args) throws DocumentException {
InputStream in = XmlParseDemo.class.getResourceAsStream("students.xml");
SAXReader saxreader = new SAXReader();
Document doc = saxreader.read(in);
System.out.println(doc.asXML());
//1、获取到所有的学生
List<Element> stuEles = doc.selectNodes("/students/student");
//2、遍历
for (Element stuEle : stuEles) {
if("s003".equals(stuEle.attributeValue("sid"))) {
Element nameEle = (Element) stuEle.selectSingleNode("name");
System.out.println(nameEle.getText());
}
}
}
当然还有种容易点的查找方式,
public static void main(String[] args) throws DocumentException {
InputStream in = XmlParseDemo.class.getResourceAsStream("students.xml");
SAXReader saxreader = new SAXReader();
Document doc = saxreader.read(in);
//3、做判断、如果sid=s003那么拿到小王
Element stuEleS003 = (Element) doc.selectSingleNode("/students/student[@sid='s003']");
System.out.println(stuEleS003.selectSingleNode("name").getText());
}
这一些代码与上面一样,都可以找到“小王”这个学生
输出: