一、配置文件
硬编码
-
写死到java程序中,并且可能经常性的改动.改动之后需要做大量的工作(编译,部署...),这个现象就叫做硬编码
-
如何解决硬编码?
将频繁改动的,写死到java代码中的数据,写在一个公共的文件中,
后缀为properties,XML,文件放到resources炸药包文件夹内
这种文件成为配置文件
二、properties需要注意的地方,解析properties的工具类的操作
注意:properties有工具类,XML没有
基本语法:
- 配置文件需要跟随着字节码走.需要放在source folder(炸药包)中.如果直接放在source folder中的文件,是会跟着字节码复制到字节码输出路径中的(项目开发好之后,给别人的只有字节码和配置文件).
- 在配置文件中,所有的数据都是字符串类型,不需要使用[ 引号 ]
- 在配置文件中,不需要使用[ 空格 ]
解析properties操作
/**
* FileInputStream方式
* 绝对路径
*/
@Test
public void testGetUserInfoFormProperties() throws Exception {
// 1.读取配置文件,转成输入流
InputStream inputStream = new FileInputStream(
new File("C:/Users/12252/Desktop/WolfCode/codeWork2/day03/resources/user.properties"));
// 创建以一个Properties的工具类
Properties p = new Properties();
// 调用load方法读取流中的数据 相当于把流中的数据写入到了p对象
p.load(inputStream);
// 2.从Property对象中获取数据 get方法:是map的 getProperties方法:是properties的
// properties 这个工具类的本质是map
String username = p.getProperty("username");
String password = p.getProperty("password");
System.out.println(username);
System.out.println(password);
}
/**
* getContextClassLoader方式
* 没有盘符,相对路径,只要放到resources文件就可以读取
*/
@Test
public void testGetUserInfoFormProperties2() throws Exception {
// 读取配置文件,转成输入流
InputStream inputStream = Thread.currentThread()
.getContextClassLoader()//getContextClassLoader方法表示去bin目录下去寻找对应名字的配置文件
.getResourceAsStream("user.properties");
// 创建以一个Properties的工具类
Properties p = new Properties();
// 调用load方法读取流中的数据 相当于把流中的数据写入到了p对象
p.load(inputStream);
// 从p对象中获取数据 get 方法是map的 getProperties 方法是properties 的
// properties 这个工具类的本质是map
String username = p.getProperty("username");
String password = p.getProperty("password");
System.out.println(username);
System.out.println(password);
}
三、XML的语法结构
- 文档内容和文件本身编码格式一定要为UTF-8
- 严格区分大小写
- 标签允许嵌套,但是不允许交叉嵌套
- 有且仅有一个标签直接属于XML文档.即根标签
四、XML的文档结构(如何用java去看XML)
-
XML文档结构
XML文档.png
五、如何获取Document对象
-
两种方式获取:
image.png
六、DOM解析
- 先把XML文档加载到内存中,形成一个Document对象.
- 找到根节点.
- 通过根节点找到第二个联系人节点.
- 通过第二个联系人节点,找到名字节点.
- 通过名字节点,找到对应的文本内容.
这种形成一颗树状结构的方式去获取XML文档中的数据的解析方式,称之为DOM解析
File file = new File("C:/Users/12252/Desktop/WolfCode/codeWork2/day03/resources/contacts.xml");
// 获取第二个联系人的名字
@Test
public void testGetLinkman() throws Exception {
// 1.获取Document对象
Document document = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(file);
// 2.根据Document对象获取contacts元素
Element root = document.getDocumentElement();
// 3.根据根(contacts)元素 获取第二个联系人元素(linkman)
Element linkmanEle = (Element) root.getElementsByTagName("linkman").item(1);
// 4.根据linkman 元素获取到子元素(name元素)
Element nameEle = (Element) linkmanEle.getElementsByTagName("name").item(0);
// 5.获取name元素中的内容
String name = nameEle.getTextContent();
System.out.println(name);
}
网友评论