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

发布时间 - 2026-01-10 22:22:34    点击率:

相关阅读:

使用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:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE students [
 <!ELEMENT students (student+)>
 <!ELEMENT student (name,course,score)>
 <!ATTLIST student id CDATA #REQUIRED>
 <!ELEMENT name (#PCDATA)>
 <!ELEMENT course (#PCDATA)>
 <!ELEMENT score (#PCDATA)>
]>
<students>
 <student id="11"> 
  <name>张三</name> 
  <course>JavaSE</course>
  <score>100</score>
 </student>
 <student id="22">  
  <name>李四</name>
  <course>Oracle</course>
  <score>98</score>
 </student> 
</students>

5.DOM方式解析XML

public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
  //1.创建DOM解析器工厂
  DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
  //2.由DOM解析器工厂创建DOM解析器
  DocumentBuilder db = dbf.newDocumentBuilder();
  //3.由DOM解析器解析文档,生成DOM树
  Document doc = db.parse("scores.xml");
  //4.解析DOM树,获取文档内容(元素 属性 文本)
  //4.1获取根元素scores
  NodeList scoresList = doc.getChildNodes();
  Node scoresNode = scoresList.item(1);
  System.out.println(scoresList.getLength());
  //4.2获取scores中所有的子元素student
  NodeList studentList = scoresNode.getChildNodes();
  System.out.println(studentList.getLength());
  //4.3对每个student进行处理
  for(int i=0;i<studentList.getLength();i++){
   Node stuNode = studentList.item(i);
   //System.out.println(stuNode.getNodeType());
   //输出元素的属性 id
   if(stuNode.getNodeType()==Node.ELEMENT_NODE){
    Element elem =(Element)stuNode;
    String id= elem.getAttribute("id");
    System.out.println("id------>"+id);
   }
   //输出元素的子元素 name course score
   NodeList ncsList = stuNode.getChildNodes();
   //System.out.println(ncsList.getLength() );
   for(int j=0;j<ncsList.getLength();j++){
    Node ncs = ncsList.item(j);
    if(ncs.getNodeType() == Node.ELEMENT_NODE){
      String name = ncs.getNodeName();
      //String value = ncs.getFirstChild().getNodeValue();//文本是元素的子节点,所以要getFirstChild
      String value = ncs.getTextContent();
      System.out.println(name+"----->"+value);
    }
   }
   System.out.println();
  }
 }

6.DOM4J方式解析XML文档:

 public static void main(String[] args) throws DocumentException {
  //使用dom4j解析scores2.xml,生成dom树
  SAXReader reader = new SAXReader();
  Document doc = reader.read(new File("scores.xml"));  
  //得到根节点:students
  Element root = doc.getRootElement();  
  //得到students的所有子节点:student
  Iterator<Element> it = root.elementIterator(); 
  //处理每个student
  while(it.hasNext()){
   //得到每个学生
   Element stuElem =it.next();
   //System.out.println(stuElem);
   //输出学生的属性:id
   List<Attribute> attrList = stuElem.attributes();
   for(Attribute attr :attrList){
    String name = attr.getName();
    String value = attr.getValue();
    System.out.println(name+"----->"+value);
   }
   //输出学生的子元素:name,course,score
   Iterator <Element>it2 = stuElem.elementIterator();
   while(it2.hasNext()){
    Element elem = it2.next();
    String name = elem.getName();
    String text = elem.getText();
    System.out.println(name+"----->"+text);
   }
   System.out.println();
  } 
 }

当然,无论我们是使用那种方式解析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文件:

public class PropertiesUtil {
 private static PropertiesUtil manager = null;
 private static Object managerLock = new Object();
 private Object propertiesLock = new Object();
 private static String DATABASE_CONFIG_FILE = "/path.properties";
 private Properties properties = null;
 public static PropertiesUtil getInstance() {
  if (manager == null) {
   synchronized (managerLock) {
    if (manager == null) {
     manager = new PropertiesUtil();
    }
   }
  }
  return manager;
 }
 private PropertiesUtil() {
 }
 public static String getProperty(String name) {
  return getInstance()._getProperty(name);
 }
 private String _getProperty(String name) {
  initProperty();
  String property = properties.getProperty(name);
  if (property == null) {
   return "";
  } else {
   return property.trim();
  }
 }
 public static Enumeration<?> propertyNames() {
  return getInstance()._propertyNames();
 }
 private Enumeration<?> _propertyNames() {
  initProperty();
  return properties.propertyNames();
 }
 private void initProperty() {
  if (properties == null) {
   synchronized (propertiesLock) {
    if (properties == null) {
     loadProperties();
    }
   }
  }
 }
 private void loadProperties() {
  properties = new Properties();
  InputStream in = null;
  try {
   in = getClass().getResourceAsStream(DATABASE_CONFIG_FILE);
   properties.load(in);
  } catch (Exception e) {
   System.err
     .println("Error reading conf properties in PropertiesUtil.loadProps() "
       + e);
   e.printStackTrace();
  } finally {
   try {
    in.close();
   } catch (Exception e) {
   }
  }
 }
 /**
  * 提供配置文件路径
  * 
  * @param filePath
  * @return
  */
 public Properties loadProperties(String filePath) {
  Properties properties = new Properties();
  InputStream in = null;
  try {
   in = getClass().getResourceAsStream(filePath);
   properties.load(in);
  } catch (Exception e) {
   System.err
     .println("Error reading conf properties in PropertiesUtil.loadProperties() "
       + e);
   e.printStackTrace();
  } finally {
   try {
    in.close();
   } catch (Exception e) {
   }
  }
  return properties;
 }
}

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

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


# java读取xml配置文件  # java读取properties配置文件  # java读取properties配置文件的方法  # Java中的几种读取properties配置文件的方式  # Java读取properties配置文件时  # 出现中文乱码的解决方法  # Java读取.properties配置文件方法示例  # Java读取.properties配置文件的几种方式  # Java中使用Properties配置文件的简单方法  # 详解Java程序读取properties配置文件的方法  # Java 操作Properties配置文件详解  # java简单读取properties配置文件的方法示例  # Java读取properties配置文件的8种方式汇总  # 自己的  # 文档  # 小编  # 配置文件  # 就可以  # 的是  # 是一种  # 我在  # 在我  # 是指  # 只需  # 给大家  # 更高  # 使其  # 要比  # 当我们  # 有两种  # 要给  # 适合于  # 所述 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Python高阶函数应用_函数作为参数说明【指导】  5种Android数据存储方式汇总  JS经典正则表达式笔试题汇总  Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议  成都网站制作公司哪家好,四川省职工服务网是做什么用?  如何快速登录WAP自助建站平台?  nginx修改上传文件大小限制的方法  如何续费美橙建站之星域名及服务?  Laravel如何实现全文搜索功能?(Scout和Algolia示例)  企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?  Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】  如何用PHP快速搭建高效网站?分步指南  Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  创业网站制作流程,创业网站可靠吗?  Windows10电脑怎么设置虚拟光驱_Win10右键装载ISO镜像文件  音响网站制作视频教程,隆霸音响官方网站?  uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址  Laravel项目怎么部署到Linux_Laravel Nginx配置详解  今日头条微视频如何找选题 今日头条微视频找选题技巧【指南】  Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程  Swift中swift中的switch 语句  如何用免费手机建站系统零基础打造专业网站?  google浏览器怎么清理缓存_谷歌浏览器清除缓存加速详细步骤  昵图网官网入口 昵图网素材平台官方入口  Laravel如何集成微信支付SDK_Laravel使用yansongda-pay实现扫码支付【实战】  Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置  怎么用AI帮你为初创公司进行市场定位分析?  北京网站制作的公司有哪些,北京白云观官方网站?  Laravel中Service Container是做什么的_Laravel服务容器与依赖注入核心概念解析  Laravel如何记录自定义日志?(Log频道配置)  什么是JavaScript解构赋值_解构赋值有哪些实用技巧  如何快速上传建站程序避免常见错误?  js代码实现下拉菜单【推荐】  香港服务器网站推广:SEO优化与外贸独立站搭建策略  如何在云虚拟主机上快速搭建个人网站?  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  敲碗10年!Mac系列传将迎来「触控与联网」双革新  Laravel如何实现事件和监听器?(Event & Listener实战)  利用 Google AI 进行 YouTube 视频 SEO 描述优化  Python进程池调度策略_任务分发说明【指导】  Laravel安装步骤详细教程_Laravel环境搭建指南  Laravel如何处理和验证JSON类型的数据库字段  Laravel怎么使用Collection集合方法_Laravel数组操作高级函数pluck与map【手册】  Laravel如何保护应用免受CSRF攻击?(原理和示例)  如何在万网自助建站平台快速创建网站?  Laravel事件监听器怎么写_Laravel Event和Listener使用教程  Laravel路由Route怎么设置_Laravel基础路由定义与参数传递规则【详解】  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】