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

dom4j從jar包中讀取xml文件的方法

 更新時(shí)間:2014年02月07日 15:01:17   作者:  
這篇文章主要介紹了dom4j從jar包中讀取xml文件的方法,需要的朋友可以參考下

進(jìn)行封裝的時(shí)候,我們常常需要用xml來(lái)定義一些規(guī)范,在單獨(dú)運(yùn)行讀取的時(shí)候當(dāng)然不會(huì)有問(wèn)題,但這些xml是往往是放在jar包里的,這樣一來(lái),這些東西就找不出來(lái)了。文中用到的xml定義如下:

復(fù)制代碼 代碼如下:

<?xml version="1.0" encoding="utf-8"?>
<ACCESOS>
 <item>
  <SOCIO name="adsf">
   <NUMERO>00045050</NUMERO>
   <REPOSICION>0</REPOSICION>
   <NOMBRE>MOISES MORENO</NOMBRE>
   <TURNOS>
    <LU>T1</LU>
    <MA>T2</MA>
    <MI>T3</MI>
    <JU>T4</JU>
    <VI>T5</VI>
    <SA>T6</SA>
    <DO>T7</DO>
   </TURNOS>
  </SOCIO>
 </item>
 <item>
  <SOCIO name="adsfa">
   <NUMERO>00045051</NUMERO>
   <REPOSICION>0</REPOSICION>
   <NOMBRE>RUTH PENA</NOMBRE>
   <TURNOS>
    <LU>S1</LU>
    <MA>S2</MA>
    <MI>S3</MI>
    <JU>S4</JU>
    <VI>S5</VI>
    <SA>S6</SA>
    <DO>S7</DO>
   </TURNOS>
  </SOCIO>
 </item>
</ACCESOS>

下面來(lái)看代碼:

復(fù)制代碼 代碼如下:

public void read(){ 
    try { 
        Document doc = new SAXReader().read(new File("src/user.xml")); 
        List<Element> itemList =  doc.selectNodes("/ACCESOS/item/SOCIO"); 
        for (Iterator<Element> iter = itemList.iterator(); iter.hasNext();){ 
            Element element = iter.next(); 
            System.out.println("NUMERO =" + element.elementText("NUMERO")); 
        } 
    } catch (DocumentException e) { 
        e.printStackTrace(); 
    } 

這段代碼 寫(xiě)在Java Project中,其中user.xml放在src根目錄下,類(lèi)在src/com/jianxin/xml下,很顯然運(yùn)行以上代碼是可以出來(lái)結(jié)果的,但如果把以上代碼打包,這個(gè)jar包內(nèi)的目錄為
com/jianxin/xml
user.xml
而這里方法內(nèi)還是去src下去找user.xml,就算把src/從路徑中去掉,仍然無(wú)法定位到j(luò)ar中的user.xml上。
這主要是因?yàn)閖ar包是一個(gè)單獨(dú)的文件而非文件夾,絕對(duì)不能通過(guò)"file:/d:.../user.xml"這種形式來(lái)對(duì)文件定位,所以即使是相對(duì)路徑,也無(wú)法定位到j(luò)ar文件內(nèi)的文件。
那么把xml打入jar包,無(wú)論user.xml在哪個(gè)目錄下,jar包中的類(lèi)都可以找到,這會(huì)是幻想嗎?
當(dāng)然不是,我們可以用類(lèi)裝載器(ClassLoader)來(lái)做到:
1)ClassLoader是類(lèi)加載器的抽象類(lèi)。它可以運(yùn)行時(shí)動(dòng)態(tài)的獲取加載類(lèi)的運(yùn)行信息??梢赃@樣說(shuō),當(dāng)我們調(diào)用xml.jar中的ReadXML類(lèi)時(shí),JVM加載進(jìn)ReadXML類(lèi),并記錄下ReadXML運(yùn)行時(shí)信息(包括所在jar包的根路徑信息)。而ClassLoader類(lèi)中的方法 可以幫助我們動(dòng)態(tài)獲取這些信息:
a.public URL getResource(String),查找且有給定名稱(chēng)的資源。
b.public InputStream getResourceAsStream(String name),返回指定資源輸入流
2)ClassLoader是abstract的,不可能實(shí)例化。我們真正寫(xiě)代碼的時(shí)候,是通過(guò)Class類(lèi)中的getResource和getResourceAsStream方法 ,這兩個(gè)方法會(huì)委托ClassLoader中的getResource和getResourceAsStream方法?,F(xiàn)在對(duì)上面方法進(jìn)行重寫(xiě):

復(fù)制代碼 代碼如下:

public void read(){
 try {
     InputStream is=this.getClass().getResourceAsStream("/user.xml");
     Document doc = new SAXReader().read(is);
  List<Element> itemList =  doc.selectNodes("/ACCESOS/item/SOCIO");
  for (Iterator<Element> iter = itemList.iterator(); iter.hasNext();){
   Element element = iter.next();
   System.out.println("NUMERO =" + element.elementText("NUMERO"));
  }
 } catch (DocumentException e) {
  e.printStackTrace();
 }
}

這樣,打包之前運(yùn)行是沒(méi)有問(wèn)題的,打成包后,依然是可以運(yùn)行找到數(shù)據(jù)的~。
在這里我感覺(jué)最重要的就是獲取Class同時(shí)會(huì)獲取jar根目錄信息,同時(shí)ClassLoader也會(huì)有所改變,這點(diǎn)需要注意一下,至于到底是什么改變,目前我也說(shuō)不上來(lái),只是碰到了這樣的問(wèn)題。所以計(jì)劃看一本Java比較底層的書(shū),以讓自己在為別人封裝東西的時(shí)候更加得心就手,一直停留在應(yīng)用層次的我們,也是時(shí)候深入了解一下JVM了。
最近大部分時(shí)間都是在開(kāi)發(fā),說(shuō)好的jira可能會(huì)更晚些,做的過(guò)程中,做是用了一下dwr,下篇對(duì)其進(jìn)行描述~~~

相關(guān)文章

  • mybatis(mybatis-plus)映射文件(XML文件)中特殊字符轉(zhuǎn)義的實(shí)現(xiàn)

    mybatis(mybatis-plus)映射文件(XML文件)中特殊字符轉(zhuǎn)義的實(shí)現(xiàn)

    XML 文件在解析時(shí)會(huì)將五種特殊字符進(jìn)行轉(zhuǎn)義,本文主要介紹了mybatis(mybatis-plus)映射文件(XML文件)中特殊字符轉(zhuǎn)義的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • 設(shè)計(jì)模式系列之組合模式及其在JDK和MyBatis源碼中的運(yùn)用詳解

    設(shè)計(jì)模式系列之組合模式及其在JDK和MyBatis源碼中的運(yùn)用詳解

    這篇文章主要介紹了組合模式及其在JDK和MyBatis源碼中的運(yùn)用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Spring如何集成ibatis項(xiàng)目并實(shí)現(xiàn)dao層基類(lèi)封裝

    Spring如何集成ibatis項(xiàng)目并實(shí)現(xiàn)dao層基類(lèi)封裝

    這篇文章主要介紹了Spring如何集成ibatis項(xiàng)目并實(shí)現(xiàn)dao層基類(lèi)封裝,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • JAVA String轉(zhuǎn)化成java.sql.date和java.sql.time方法示例

    JAVA String轉(zhuǎn)化成java.sql.date和java.sql.time方法示例

    這篇文章主要給大家分享了關(guān)于JAVA String轉(zhuǎn)化成java.sql.date和java.sql.time的方法,文中給出了詳細(xì)的示例代碼,相信對(duì)大家具有一定的參考價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-03-03
  • Java中RabbitMQ消息隊(duì)列的交換機(jī)詳解

    Java中RabbitMQ消息隊(duì)列的交換機(jī)詳解

    這篇文章主要介紹了Java中的RabbitMQ交換機(jī)詳解,消息隊(duì)列是指利用高效可靠的消息傳遞機(jī)制進(jìn)行與平臺(tái)無(wú)關(guān)的數(shù)據(jù)交流,并基于數(shù)據(jù)通信來(lái)進(jìn)行分布式系統(tǒng)的集成,是在消息的傳輸過(guò)程中保存消息的容器,需要的朋友可以參考下
    2023-07-07
  • spring boot整合Cucumber(BDD)的方法

    spring boot整合Cucumber(BDD)的方法

    本篇文章主要介紹了spring boot整合Cucumber(BDD)的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-04-04
  • 淺談Java 代理機(jī)制

    淺談Java 代理機(jī)制

    Java 有兩種代理方式,一種是靜態(tài)代理,另一種是動(dòng)態(tài)代理。如果我們?cè)诖a編譯時(shí)就確定了被代理的類(lèi)是哪一個(gè),那么就可以直接使用靜態(tài)代理;如果不能確定,那么可以使用類(lèi)的動(dòng)態(tài)加載機(jī)制,在代碼運(yùn)行期間加載被代理的類(lèi)這就是動(dòng)態(tài)代理
    2021-06-06
  • Java如何將時(shí)間戳格式化為日期字符串

    Java如何將時(shí)間戳格式化為日期字符串

    這篇文章主要介紹了Java如何將時(shí)間戳格式化為日期字符串問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • SpringBoot整合RestTemplate用法的實(shí)現(xiàn)

    SpringBoot整合RestTemplate用法的實(shí)現(xiàn)

    本篇主要介紹了RestTemplate中的GET,POST,PUT,DELETE、文件上傳和文件下載6大常用的功能,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-08-08
  • Java正則替換手機(jī)號(hào)代碼實(shí)例

    Java正則替換手機(jī)號(hào)代碼實(shí)例

    本文的主要內(nèi)容是Java語(yǔ)言中正則表達(dá)式替換手機(jī)號(hào)的第4到第7位,實(shí)現(xiàn)方法十分簡(jiǎn)單,同時(shí)涉及了一些正則表達(dá)式的相關(guān)用法,需要的朋友可以參考下。
    2017-09-09

最新評(píng)論

成安县| 汶川县| 鸡东县| 始兴县| 哈巴河县| 清徐县| 明星| 都江堰市| 进贤县| 剑河县| 积石山| 六安市| 改则县| 清涧县| 武邑县| 三河市| 石楼县| 梨树县| 嘉禾县| 太康县| 商河县| 竹山县| 湛江市| 额济纳旗| 始兴县| 新巴尔虎右旗| 宝清县| 乌审旗| 云梦县| 兰溪市| 满洲里市| 花莲市| 天柱县| 连云港市| 呼玛县| 阿图什市| 元谋县| 安仁县| 嘉峪关市| 普宁市| 镇雄县|