最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java開(kāi)發(fā)中讀取XML與properties配置文件的方法

 更新時(shí)間:2017年01月08日 10:07:04   作者:難得丿糊塗灬  
這篇文章主要介紹了Java開(kāi)發(fā)中讀取XML與properties配置文件的方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下

相關(guān)閱讀:

使用Ajax進(jìn)行文件與其他參數(shù)的上傳功能(java開(kāi)發(fā))

1. XML文件:

什么是XML?XML一般是指可擴(kuò)展標(biāo)記語(yǔ)言,標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言的子集,是一種用于標(biāo)記電子文件使其具有結(jié)構(gòu)性的標(biāo)記語(yǔ)言。

2.XML文件的優(yōu)點(diǎn):

1)XML文檔內(nèi)容和結(jié)構(gòu)完全分離。
2)互操作性強(qiáng)。
3)規(guī)范統(tǒng)一。
4)支持多種編碼。
5)可擴(kuò)展性強(qiáng)。

3.如何解析XML文檔:

XML在不同的語(yǔ)言中解析XML文檔都是一樣的,只不過(guò)實(shí)現(xiàn)的語(yǔ)法不一樣,基本的解析方式有兩種,一種是SAX方式,是按照XML文件的順序一步一步解析。另外一種的解析方式DOM方式,而DOM方式解析的關(guān)鍵就是節(jié)點(diǎn)。另外還有DOM4J、JDOM等方式。本文介紹的是DOM、DOM4J方式與封裝成一個(gè)工具類的方式來(lái)讀取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.創(chuàng)建DOM解析器工廠
  DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
  //2.由DOM解析器工廠創(chuàng)建DOM解析器
  DocumentBuilder db = dbf.newDocumentBuilder();
  //3.由DOM解析器解析文檔,生成DOM樹(shù)
  Document doc = db.parse("scores.xml");
  //4.解析DOM樹(shù),獲取文檔內(nèi)容(元素 屬性 文本)
  //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對(duì)每個(gè)student進(jìn)行處理
  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();//文本是元素的子節(jié)點(diǎn),所以要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樹(shù)
  SAXReader reader = new SAXReader();
  Document doc = reader.read(new File("scores.xml"));  
  //得到根節(jié)點(diǎn):students
  Element root = doc.getRootElement();  
  //得到students的所有子節(jié)點(diǎn):student
  Iterator<Element> it = root.elementIterator(); 
  //處理每個(gè)student
  while(it.hasNext()){
   //得到每個(gè)學(xué)生
   Element stuElem =it.next();
   //System.out.println(stuElem);
   //輸出學(xué)生的屬性:id
   List<Attribute> attrList = stuElem.attributes();
   for(Attribute attr :attrList){
    String name = attr.getName();
    String value = attr.getValue();
    System.out.println(name+"----->"+value);
   }
   //輸出學(xué)生的子元素: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();
  } 
 }

當(dāng)然,無(wú)論我們是使用那種方式解析XML的,都需要導(dǎo)入jar包(千萬(wàn)不要忘記)。

7.我自己的方式:

在實(shí)際開(kāi)發(fā)的工程中,我們要善于使用工具類,將我們反復(fù)使用的功能封裝成一個(gè)工具類,所以,下面的方式就是我在開(kāi)發(fā)的過(guò)程中使用的方式.

7.1什么是properties文件:

7.1.1 從結(jié)構(gòu)上講:

.xml文件主要是樹(shù)形文件。
.properties文件主要是以key-value鍵值對(duì)的形式存在

7.1.2 從靈活的角度來(lái)說(shuō):

.xml文件要比.properties文件的靈活讀更高一些。

7.1.3 從便捷的角度來(lái)說(shuō):

.properties文件比.xml文件配置更加簡(jiǎn)單。

7.1.4 從應(yīng)用程度上來(lái)說(shuō):

.properties文件比較適合于小型簡(jiǎn)單的項(xiàng)目,因?yàn)?xml更加靈活。

7.2自己的properties文檔:

在我自己的項(xiàng)目中創(chuàng)建了一個(gè)path.properties文件,里面用來(lái)存放我即將使用的路徑,以名字=值的方式存放。例如:

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;
 }
}

當(dāng)我們使用之前,我們只需要給 DATABASE_CONFIG_FILE 屬性附上值,就是我們.properties文件的名稱,當(dāng)使用的時(shí)候,我們就可以直接使用類名. getProperty(“realPath”);的方式就可以獲取到在.properties文件中的key為realPath的內(nèi)容。

以上所述是小編給大家介紹的Java開(kāi)發(fā)中讀取XML與properties配置文件的方法,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的!

相關(guān)文章

  • Java中的ThreadLocal詳解

    Java中的ThreadLocal詳解

    THreadLocalMap中的Entry的key使用的是ThreadLocal對(duì)象的弱引用,在沒(méi)有其他地方對(duì)ThreadLoca依賴,ThreadLocalMap中的ThreadLocal對(duì)象就會(huì)被回收掉,但是對(duì)應(yīng)的不會(huì)被回收,具體內(nèi)容請(qǐng)和小編一起看下面文章詳情
    2021-09-09
  • Java如何根據(jù)實(shí)體指定字段值對(duì)其List進(jìn)行排序詳解

    Java如何根據(jù)實(shí)體指定字段值對(duì)其List進(jìn)行排序詳解

    在Java項(xiàng)目中可能會(huì)遇到給出一些條件,將List元素按照給定條件進(jìn)行排序的情況,這篇文章主要給大家介紹了關(guān)于Java如何根據(jù)實(shí)體指定字段值對(duì)其List進(jìn)行排序的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-07-07
  • Springboot整合quartz產(chǎn)生錯(cuò)誤及解決方案

    Springboot整合quartz產(chǎn)生錯(cuò)誤及解決方案

    這篇文章主要介紹了Springboot整合quartz產(chǎn)生錯(cuò)誤及解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Maven本地jar引用的實(shí)現(xiàn)方法

    Maven本地jar引用的實(shí)現(xiàn)方法

    這篇文章主要介紹了Maven本地jar引用的實(shí)現(xiàn)方法的相關(guān)資料,希望通過(guò)本文能幫助到大家,實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-10-10
  • Spring Cloud Gateway 使用JWT工具類做用戶登錄校驗(yàn)功能

    Spring Cloud Gateway 使用JWT工具類做用戶登錄校驗(yàn)功能

    這篇文章主要介紹了Spring Cloud Gateway 使用JWT工具類做用戶登錄校驗(yàn)的示例代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • 使用Springboot整合GridFS實(shí)現(xiàn)文件操作

    使用Springboot整合GridFS實(shí)現(xiàn)文件操作

    這篇文章主要介紹了使用Springboot整合GridFS實(shí)現(xiàn)文件操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Java(springboot) 讀取txt文本內(nèi)容代碼實(shí)例

    Java(springboot) 讀取txt文本內(nèi)容代碼實(shí)例

    這篇文章主要介紹了Java(springboot) 讀取txt文本內(nèi)容代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Jdk11使用HttpClient提交Http2請(qǐng)求的實(shí)現(xiàn)方法

    Jdk11使用HttpClient提交Http2請(qǐng)求的實(shí)現(xiàn)方法

    這篇文章主要介紹了Jdk11使用HttpClient提交Http2請(qǐng)求的實(shí)現(xiàn)方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • Mybatis源碼解析之事務(wù)管理

    Mybatis源碼解析之事務(wù)管理

    大家好,本篇文章主要講的是Mybatis源碼解析之事務(wù)管理,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • 解決IDEA安裝插件搜索不到插件的問(wèn)題

    解決IDEA安裝插件搜索不到插件的問(wèn)題

    這篇文章主要介紹了解決IDEA安裝插件搜索不到插件的問(wèn)題,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03

最新評(píng)論

镇沅| 高安市| 镇安县| 柳林县| 大兴区| 象山县| 阳高县| 云林县| 蓬溪县| 宁城县| 八宿县| 寿光市| 杂多县| 西平县| 汉源县| 祥云县| 龙胜| 同心县| 西乌珠穆沁旗| 安陆市| 久治县| 新闻| 饶河县| 宜州市| 阳城县| 宝清县| 游戏| 金秀| 云浮市| 隆昌县| 原阳县| 富锦市| 南木林县| 长沙县| 锡林浩特市| 南雄市| 洛宁县| 关岭| 建平县| 新蔡县| 陵水|