一:java中配置文件的三种配置位置及读取方式
1:同包 :配置文件和帮助类在同一个包中
读取方式: Demo1.class.getResourceAsStream(“db.properties”)
package parse;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;public class Dome {
public static void main(String[] args) throws Exception {
//同包
InputStream is=Dome.class.getResourceAsStream("db.properties");
Properties p=new Properties();
p.load(is);
System.out.println(p.getProperty("uname"));
System.out.println(p.getProperty("upass"));
}
}
2:根路径:根路径和同包的配置方式是一样的只是加了一个‘ / ’和换到了另一个源文件夹
读取方式:Demo1.class.getResourceAsStream("/db.properties")
package parse;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;public class Dome1 {
public static void main(String[] args) throws Exception {
// 同根
//同根与同包区别就是多了个/
InputStream is = Dome.class.getResourceAsStream("/db.properties");
Properties p = new Properties();
p.load(is);
System.out.println(p.getProperty("uname"));
System.out.println(p.getProperty("upass"));
}
}
3:WEB-INF安全路径(WEB-INF 安全目录):放在这个目录下的文件不能直接被外界访问 ,只能间接访问
Demo1.class.getResourceAsStream("/WEB-INF/db.properties")
package parse;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;/**
* Servlet implementation class DomeServlet
*/
@WebServlet("/DEMO")
public class DomeServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {
InputStream is = arg0.getServletContext().getResourceAsStream("/WEB-INF/db.properties");
Properties p=new Properties();
p.load(is);
System.out.println(p.getProperty("uname"));
System.out.println(p.getProperty("upass"));
}
}
二:dom4j的使用
1、dome4j常用方法:
①.SAXReader:读取.xml文件专用方法
②.selectNodes():获取节点对象,返回的是一个List集合
③.attributeValue():获取指定对象的值
④.selectSingleNode():获取单个对象
⑤.getText():获取文本信息
package parse;
import java.io.InputStream;
import java.util.List;import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;public class Dome2 {
public static void main(String[] args) throws Exception {
//获取小王的人名
/**
* 1.读取到student.xml的xml串的内容
* 2、解析获取到所有的student标签内容
* 3、获取到所有student标签的sid
* 当sid=s003的时候,获取name标签的内容
*/
InputStream is=Dome2.class.getResourceAsStream("students.xml");
SAXReader sr=new SAXReader();//需要Jar包
Document doc = sr.read(is);
//selectNodes获取对应节点对象 返回list
List<Element> list = doc.selectNodes("/students/student");//导dom4j下面的
for (Element element : list) {
String sid=element.attributeValue("sid");
if("s003".equals(sid)) {
//selectSingleNode获取对应节点对象 返回单个元素对象
Element nameEle =(Element) element.selectSingleNode("name");
System.out.println(nameEle.getText());
}
}
}
}
三:Xpath的使用
①@ 属性 “/”定义路径
②Xpath比dom4j可以更快的获得值
package parse;
import java.io.InputStream;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;public class Dome3 {
public static void main(String[] args) throws Exception {
InputStream is=Dome3.class.getResourceAsStream("students.xml");
SAXReader sr=new SAXReader();
Document doc = sr.read(is);
Element e=(Element) doc.selectSingleNode("/students/student[@sid='s002']/name");
System.out.println(e.getText());
}
}
四、例题
要解析的题目:
1、获取所有action中的type的值
package parse;
import java.io.InputStream;
import java.util.List;import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;public class Dome4 {
public static void main(String[] args) throws Exception {
InputStream is=Dome4.class.getResourceAsStream("config.xml");
SAXReader sr=new SAXReader();
Document doc = sr.read(is);
// 获取对应节点对象
List<Element> list = doc.selectNodes("/config/action");
for (Element element : list) {
//获取指定对象的属性值
String types = element.attributeValue("type");
System.out.println(types);
}
}
}
2.获取第二个action中的type的值
package parse;
import java.io.InputStream;
import java.util.List;import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;public class Dome4 {
public static void main(String[] args) throws Exception {
InputStream is = Dome4.class.getResourceAsStream("config.xml");
SAXReader sr = new SAXReader();
Document doc = sr.read(is);
// 获取对应节点对象
List<Element> Elements = doc.selectNodes("/config/action");
// 获取指定对象的属性值
String type =Elements.get(1).attributeValue("type");
System.out.println(type);
}
}
3、获取所有的action的所有forward的path
package parse;
import java.io.InputStream;
import java.util.List;import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;import com.sun.xml.internal.ws.developer.MemberSubmissionEndpointReference.Elements;
public class Dome4 {
public static void main(String[] args) throws Exception {InputStream is = Dome4.class.getResourceAsStream("config.xml");
SAXReader sr = new SAXReader();
Document doc = sr.read(is);
// 获取对应节点对象
List<Element> Element = doc.selectNodes("/config/action/forward");
for (Element ele : Element) {
//获取指定对象的属性值
String path = ele.attributeValue("path");
System.out.println(path);
}
}
}
4、获取第二个action的第二个forward的path
package parse;
import java.io.InputStream;
import java.util.List;import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;import com.sun.xml.internal.ws.developer.MemberSubmissionEndpointReference.Elements;
public class Dome4 {
public static void main(String[] args) throws Exception {InputStream is = Dome4.class.getResourceAsStream("config.xml");
SAXReader sr = new SAXReader();
Document doc = sr.read(is);
List<Element> Elements = doc.selectNodes("/config/action");
// 获取对应节点对象
List<Element> Elementss = Elements.get(1).selectNodes("forward");
for (Element eless : Elementss) {
//获取指定对象的属性值
String path = eless.attributeValue("path");
System.out.println(path);
}
}
}