在路上

 找回密码
 立即注册
在路上 站点首页 学习 查看内容

Java开发中读取XML与properties配置文件的方法

2017-3-7 12:50| 发布者: zhangjf| 查看: 1511| 评论: 0

摘要: 相关阅读: 使用Ajax进行文件与其他参数的上传功能(java开发) 1. XML文件: 什么是XML?XML一般是指可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。 2.XML文件的优点: ...

相关阅读:

使用Ajax进行文件与其他参数的上传功能(java开发)

1. XML文件:

什么是XML?XML一般是指可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。

2.XML文件的优点:

1)XML文档内容和结构完全分离。
2)互操作性强。
3)规范统一。
4)支持多种编码。
5)可扩展性强。

3.如何解析XML文档:

XML在不同的语言中解析XML文档都是一样的,只不过实现的语法不一样,基本的解析方式有两种,一种是SAX方式,是按照XML文件的顺序一步一步解析。另外一种的解析方式DOM方式,而DOM方式解析的关键就是节点。另外还有DOM4J、JDOM等方式。本文介绍的是DOM、DOM4J方式与封装成一个工具类的方式来读取XML文档。

4.XML文档:

scores.xml:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!DOCTYPE students [
  3. <!ELEMENT students (student+)>
  4. <!ELEMENT student (name,course,score)>
  5. <!ATTLIST student id CDATA #REQUIRED>
  6. <!ELEMENT name (#PCDATA)>
  7. <!ELEMENT course (#PCDATA)>
  8. <!ELEMENT score (#PCDATA)>
  9. ]>
  10. <students>
  11. <student id="11">
  12. <name>张三</name>
  13. <course>JavaSE</course>
  14. <score>100</score>
  15. </student>
  16. <student id="22">
  17. <name>李四</name>
  18. <course>Oracle</course>
  19. <score>98</score>
  20. </student>
  21. </students>
复制代码

5.DOM方式解析XML

  1. public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
  2. //1.创建DOM解析器工厂
  3. DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
  4. //2.由DOM解析器工厂创建DOM解析器
  5. DocumentBuilder db = dbf.newDocumentBuilder();
  6. //3.由DOM解析器解析文档,生成DOM树
  7. Document doc = db.parse("scores.xml");
  8. //4.解析DOM树,获取文档内容(元素 属性 文本)
  9. //4.1获取根元素scores
  10. NodeList scoresList = doc.getChildNodes();
  11. Node scoresNode = scoresList.item(1);
  12. System.out.println(scoresList.getLength());
  13. //4.2获取scores中所有的子元素student
  14. NodeList studentList = scoresNode.getChildNodes();
  15. System.out.println(studentList.getLength());
  16. //4.3对每个student进行处理
  17. for(int i=0;i<studentList.getLength();i++){
  18. Node stuNode = studentList.item(i);
  19. //System.out.println(stuNode.getNodeType());
  20. //输出元素的属性 id
  21. if(stuNode.getNodeType()==Node.ELEMENT_NODE){
  22. Element elem =(Element)stuNode;
  23. String id= elem.getAttribute("id");
  24. System.out.println("id------>"+id);
  25. }
  26. //输出元素的子元素 name course score
  27. NodeList ncsList = stuNode.getChildNodes();
  28. //System.out.println(ncsList.getLength() );
  29. for(int j=0;j<ncsList.getLength();j++){
  30. Node ncs = ncsList.item(j);
  31. if(ncs.getNodeType() == Node.ELEMENT_NODE){
  32. String name = ncs.getNodeName();
  33. //String value = ncs.getFirstChild().getNodeValue();//文本是元素的子节点,所以要getFirstChild
  34. String value = ncs.getTextContent();
  35. System.out.println(name+"----->"+value);
  36. }
  37. }
  38. System.out.println();
  39. }
  40. }
复制代码

6.DOM4J方式解析XML文档:

  1. public static void main(String[] args) throws DocumentException {
  2. //使用dom4j解析scores2.xml,生成dom树
  3. SAXReader reader = new SAXReader();
  4. Document doc = reader.read(new File("scores.xml"));
  5. //得到根节点:students
  6. Element root = doc.getRootElement();
  7. //得到students的所有子节点:student
  8. Iterator<Element> it = root.elementIterator();
  9. //处理每个student
  10. while(it.hasNext()){
  11. //得到每个学生
  12. Element stuElem =it.next();
  13. //System.out.println(stuElem);
  14. //输出学生的属性:id
  15. List<Attribute> attrList = stuElem.attributes();
  16. for(Attribute attr :attrList){
  17. String name = attr.getName();
  18. String value = attr.getValue();
  19. System.out.println(name+"----->"+value);
  20. }
  21. //输出学生的子元素:name,course,score
  22. Iterator <Element>it2 = stuElem.elementIterator();
  23. while(it2.hasNext()){
  24. Element elem = it2.next();
  25. String name = elem.getName();
  26. String text = elem.getText();
  27. System.out.println(name+"----->"+text);
  28. }
  29. System.out.println();
  30. }
  31. }
复制代码

当然,无论我们是使用那种方式解析XML的,都需要导入jar包(千万不要忘记)。

7.我自己的方式:

在实际开发的工程中,我们要善于使用工具类,将我们反复使用的功能封装成一个工具类,所以,下面的方式就是我在开发的过程中使用的方式.

7.1什么是properties文件:

7.1.1 从结构上讲:

.xml文件主要是树形文件。
.properties文件主要是以key-value键值对的形式存在

7.1.2 从灵活的角度来说:

.xml文件要比.properties文件的灵活读更高一些。

7.1.3 从便捷的角度来说:

.properties文件比.xml文件配置更加简单。

7.1.4 从应用程度上来说:

.properties文件比较适合于小型简单的项目,因为.xml更加灵活。

7.2自己的properties文档:

在我自己的项目中创建了一个path.properties文件,里面用来存放我即将使用的路径,以名字=值的方式存放。例如:

realPath = D:/file/

7.3 解析自己的.properties文件:

  1. public class PropertiesUtil {
  2. private static PropertiesUtil manager = null;
  3. private static Object managerLock = new Object();
  4. private Object propertiesLock = new Object();
  5. private static String DATABASE_CONFIG_FILE = "/path.properties";
  6. private Properties properties = null;
  7. public static PropertiesUtil getInstance() {
  8. if (manager == null) {
  9. synchronized (managerLock) {
  10. if (manager == null) {
  11. manager = new PropertiesUtil();
  12. }
  13. }
  14. }
  15. return manager;
  16. }
  17. private PropertiesUtil() {
  18. }
  19. public static String getProperty(String name) {
  20. return getInstance()._getProperty(name);
  21. }
  22. private String _getProperty(String name) {
  23. initProperty();
  24. String property = properties.getProperty(name);
  25. if (property == null) {
  26. return "";
  27. } else {
  28. return property.trim();
  29. }
  30. }
  31. public static Enumeration<?> propertyNames() {
  32. return getInstance()._propertyNames();
  33. }
  34. private Enumeration<?> _propertyNames() {
  35. initProperty();
  36. return properties.propertyNames();
  37. }
  38. private void initProperty() {
  39. if (properties == null) {
  40. synchronized (propertiesLock) {
  41. if (properties == null) {
  42. loadProperties();
  43. }
  44. }
  45. }
  46. }
  47. private void loadProperties() {
  48. properties = new Properties();
  49. InputStream in = null;
  50. try {
  51. in = getClass().getResourceAsStream(DATABASE_CONFIG_FILE);
  52. properties.load(in);
  53. } catch (Exception e) {
  54. System.err
  55. .println("Error reading conf properties in PropertiesUtil.loadProps() "
  56. + e);
  57. e.printStackTrace();
  58. } finally {
  59. try {
  60. in.close();
  61. } catch (Exception e) {
  62. }
  63. }
  64. }
  65. /**
  66. * 提供配置文件路径
  67. *
  68. * @param filePath
  69. * @return
  70. */
  71. public Properties loadProperties(String filePath) {
  72. Properties properties = new Properties();
  73. InputStream in = null;
  74. try {
  75. in = getClass().getResourceAsStream(filePath);
  76. properties.load(in);
  77. } catch (Exception e) {
  78. System.err
  79. .println("Error reading conf properties in PropertiesUtil.loadProperties() "
  80. + e);
  81. e.printStackTrace();
  82. } finally {
  83. try {
  84. in.close();
  85. } catch (Exception e) {
  86. }
  87. }
  88. return properties;
  89. }
  90. }
复制代码

当我们使用之前,我们只需要给 DATABASE_CONFIG_FILE 属性附上值,就是我们.properties文件的名称,当使用的时候,我们就可以直接使用类名. getProperty(“realPath”);的方式就可以获取到在.properties文件中的key为realPath的内容。

以上所述是小编给大家介绍的Java开发中读取XML与properties配置文件的方法,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

最新评论

小黑屋|在路上 ( 蜀ICP备15035742号-1 

;

GMT+8, 2025-7-7 15:36

Copyright 2015-2025 djqfx

返回顶部