目录
1. Java中配置文件的三种配置位置及读取方式
1.1 读取*.properties配置文件
.properties文件:
#账户
username=scott
#密码
password=tiger
通过java读取.properties文件
package com.test;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Test extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
//-------------------------------------------------------------------
//获得application(ServletContext)
ServletContext application = req.getSession().getServletContext();
//访问WEB-INF下面的do.properties文件
String xPath = "/WEB-INF/do.properties";
//通过上下文(application)获得输入流(InputStream)
InputStream is= application.getResourceAsStream(xPath);
//实例化properties对象
Properties properties = new Properties();
//properties对象加载输入流
properties.load(is);
//通过properties获得getProperty()方法得到参数
System.out.println(properties.getProperty("username"));
System.out.println(properties.getProperty("password"));
//-------------------------------------------------------------------
//访问src下面的配置文件
// InputStream is = Test.class.getResourceAsStream("/do.properties");
// Properties properties = new Properties();
// properties.load(is);
// String username = properties.getProperty("username");
// String password = properties.getProperty("password");
// System.out.println(username);
// System.out.println(password);
//-------------------------------------------------------------------
//访问同包下面的配置文件
// InputStream is = Test.class.getResourceAsStream("do.properties");
// Properties properties = new Properties();
// properties.load(is);
// String username = properties.getProperty("username");
// String password = properties.getProperty("password");
// System.out.println(username);
// System.out.println(password);
}
}
1.2 读取.xml文件
.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<Students>
<Student a="1" sid="s1">
<name>张三</name>
</Student>
<Student a="2" sid="s2">
<name>李四</name>
</Student>
<Student a="3" sid="y2">
<name>王五</name>
</Student>
<a a="3a" sid="y2a">
<name>王五a</name>
</a>
<b a="3b" sid="y2b">
<name>王五b</name>
</b>
</Students>
通过java底层的方式读取
package com.test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
import com.sun.org.apache.bcel.internal.classfile.AttributeReader;
/**
* 解析XML文件的测试类
* @author Administrator
*
*/
public class TestSelectXPath{
public static void main(String[] args) throws Exception {
InputStream is = TestSelectXPath.class.getResourceAsStream("Test.xml"); //获得Test.xml文件
SAXReader saxreader = new SAXReader(); //实例化SAXReader对象
Document document = saxreader.read(is); //读取Test.xml文件
//String xpath = "/Students/Student"; //元素节点Students中的Student元素节点
//String xpath = "//Student"; //元素节点为Student的不管在什么节点下面 ,如果是/Student查找不到元素节点
// List<Node> li = document.selectNodes(xpath); //文件中查询元素节点以下的所有内容,返回的是List(多个Node节点)
// for (Node node : li) { //遍历得到的是多个节点
// Element StudentElement = (Element)node; //将节点转为元素节点
Element nameElement = (Element)StudentElement.selectSingleNode("name"); //在元素节点中查询,其中元素节点中包含name的元素节点,得到的是节点类型,强转Elemen元素节点类型
System.out.println(nameElement.getText());//得到所有元素节点中的文本类型(内容)
// String aAttribute = StudentElement.attribute("a").getText();
// //StudentElement(得到元素节点Student),attribute得到元素节点中的属性“a”,获得文本类型
// System.out.println(aAttribute); //输出文本类型
//}
//------------------------------------------------------------------
// String xpath = "//@a";//属性为a的节点
// List<Node> aNode = document.selectNodes(xpath); //文档中查询节点
// for (Node anode : aNode) { //得到多个属性节点
// System.out.println(anode.getText()); //输出属性节点的文本类型
// }
//--------------------------------------------------------------------
// String xpath ="/Students/Student[2]"; //选取属于Students 子元素的第2个 Student 元素。
// List<Node> studentNodes = document.selectNodes(xpath); //从文档中查询节点
// for (Node studentSode : studentNodes) { //得到多个节点
// Element ElementStudent = (Element)studentSode; //将节点转为元素节点
// System.out.println(ElementStudent.selectSingleNode("name").getText());
// //输出,在元素节点中查找元素节点为name的文本节点的内容()
// System.out.println(ElementStudent.attribute("sid").getText());
// //输出,在元素节点中查找属性为sid的文本节点的内容
// }
//------------------------------------------------------------------------------
// String xpath ="/Students/Student[last()]"; //选取属于Students 子元素的最后一个 Student 元素。
// Node StudentLactNode = document.selectSingleNode(xpath);
// System.out.println(StudentLactNode.selectSingleNode("name").getText());
// //输出,在元素节点中查找元素节点为name的文本节点的内容()
// //System.out.println(StudentLactNode.hasContent()); //判断元素节点是否有内容
// //System.out.println(StudentLactNode.ATTRIBUTE_NODE);
//---------------------------------------------------------------------------
// String xpath = "Students/Student[@sid='y2']";
// Element StudentSidNode = (Element)document.selectSingleNode(xpath);
// //需要转元素节点,不然的话有一些方法调不出
// System.out.println(StudentSidNode.selectSingleNode("name").getText());
// //通过元素节点查询节点为name的文本节点内容
// System.out.println(StudentSidNode.attribute("sid").getText());
// -------------------------------------------------------------------------
// String xpath = "/Students/Student[@*]";//匹配任何属性节点,不打也是这样
// List<Node> allNodes = document.selectNodes(xpath);
// for (Node node : allNodes) {
// Element nodeELement = (Element)node;
// System.out.println(nodeELement.selectSingleNode("name").getText());
// }
// -------------------------------------------------------------------------
// String xpath = "//a|//b";//匹配a或者b节点
//获得元素
// List<Node> allNodes = document.selectNodes(xpath);
// for (Node node : allNodes) {
// Element abEmelemt = (Element)node;
// System.out.println(abEmelemt.attribute("sid").getText());
// System.out.println(abEmelemt.selectSingleNode("name").getText());
// //System.out.println(abEmelemt.selectSingleNode("sid").getText());
// }
// -------------------------------------------------------------------------
}
}
在Servlet中读取.xml文件:
package com.test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import javax.servlet.ServletContext;
/**
* 测试
*/
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class TestSelectXPathServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
//获取Test.xml在WEB-INF下面的路径
String xpath = "/WEB-INF/Test.xml";
//获得application(ServletContext)
ServletContext application = req.getSession().getServletContext();
//通过上下文(application)获得输入流(InputStream)
InputStream is = application.getResourceAsStream(xpath);
//实例化阅读器--驱动包里面的
SAXReader saxReader = new SAXReader();
try {
//使用阅读器读取is里面的文件
Document document = saxReader.read(is);
List<Element> StudentEmelemt = document.selectNodes("//Student");
for (Element studentEmelemt : StudentEmelemt) {
System.out.println(studentEmelemt.attributeValue("sid"));
}
} catch (DocumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
2 XML和*.properties(属性文件)
2.1 存放位置
2.1.1 src根目录下
Xxx.class.getResourceAsStream("/config.properties");
2.2.2 与读取配置文件的类在同一包
Xxx.class.getResourceAsStream("config2.properties");
2.2.3 WEB-INF(或其子目录下)
ServletContext application = this.getServletContext();
InputStream is = application.getResourceAsStream("/WEB-INF/config3.properties");
注1:*.properties文件
key=value
#注释