1. Java中配置文件的三种配置位置及读取方式
方法一
这是需要读取出来的代码
读取后【这种方法不常用】
1.1 XML和*.properties(属性文件)
存放位置: 它在src根目录下
Xxx.class.getResourceAsStream("/config.properties");
与读取配置文件的类在同一包
Xxx.class.getResourceAsStream("config2.properties");
package parse;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
* 各个位置下的资源文件(properties、xml结尾的文件)的读取方式
* 1、同包下的资源文件读取
* 2、将所有的资源文件放在根目录下
* 编译后所有的资源文件都会自动进WEB-INF下【一般开发用这种】
* 3、直接将资源文件放到web-inf下
* @author zhouyanpeng
* 第一种方法 很少用
*/
public class PropertiesDemo {
public static void main(String[] args) throws IOException {
//将当前类同包下的db.properties资源文件转换成输入流
//斜杠代表根目录
InputStream in = PropertiesDemo.class.getResourceAsStream("/db.properties");
Properties p = new Properties();
p.load(in);
//未获取到则返回null
System.out.println(p.getProperty("uname"));
System.out.println(p.getProperty("upass"));
}
}
WEB-INF(或其子目录下)
ServletContext application = this.getServletContext();
InputStream is = application.getResourceAsStream("/WEB-INF/config3.properties");
这种方法必须写Servlet并配置才行
public class PropertiesServlet extends HttpServlet{
private static final long serialVersionUID = 1L;
@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"));
}
}
配置
tomcat服务器文件夹含义
//bin 放命令的
//config 放tomcat服务配置的
//work 临时文件
//webapp 发布项目的目录
//web-inf 安全目录 含义:不能被外界访问
//log 日志
资源文件
凡是以propertiesj或以xml结尾的都是资源文件【xml同时也是配置文件】,或一切静态文件都是资源文件。
常见的资源文件
.properties和.xml
静态资源文件
css、js、html、图片、视频
properties文件的解析方式有java.util.properties这个类来完成
xml文件:应该有一个工具类来完成
jdk/jdom
sax解析 由上往下解析
dom4j解析 由外到内解析
dom节点
<html>
<body>
<div id="head"></div>
<div id="content"><
xxxx
<div></div>
/div>
</body>
</html>
像<http></http>、<body></body>、<div></div>这些就是节点了
2. XML的作用
程序之间的数据传输通讯 程序之间的数据传输通讯
PHP语言 <- 快递100 <- Java语言
配置文件 配置文件config.xml
存储数据,充当小型数据库 存储数据,充当小型数据库
规范数据格式 规范数据格式,是数据具有结构性,易读易处理 是数据具有结构性,易读易处理
3. dom4j+xpath解析xml文件
xpath等同数据库的select语句
document.selectNodes(xpath);//查一组
document.selectSingleNode(xpath);//查单个
xml可以作为数据传输
每一个接口传输的xml节点及节点内容都不相同,那么对应的解析方式是不是应该写很多个呢?
思考一个xml解析方法解析多种格式的文件
反向思考,将数据库查出来的任意类型的集合转成对应的xml格式字符串。
DOM由节点组成
Node
元素节点
属性节点
文本节点
xpath
/ 定位路径 在系统中建一个文件叫document/students/student/sid|name
@ 属性
students.xml
获取小王
方法一
public class XmlParseDemo {
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.asXML());
// System.out.println(nameEle.getText());
// }
// }
// 3.做判断、如果sid=s003那么拿到小王
Element stuEleS003 = (Element)doc.selectSingleNode("students/student[@sid='s003']");
System.out.println(stuEleS003.selectSingleNode("name").getText());
}
}
方法二
InputStream in = XmlParseDemo.class.getResourceAsStream("students.xml");
SAXReader saxReader = new SAXReader();
Document doc = saxReader.read(in);
Element stuEleS003 = (Element)doc.selectSingleNode("students/student[@sid='s003']");
System.out.println(stuEleS003.selectSingleNode("name").getText());
这种较为简单,但要明确知道文件位置
想要了解更多,联系博主。