程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> dom4j從jar包中讀取xml文件的辦法

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

編輯:關於JAVA

dom4j從jar包中讀取xml文件的辦法。本站提示廣大學習愛好者:(dom4j從jar包中讀取xml文件的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是dom4j從jar包中讀取xml文件的辦法正文


停止封裝的時刻,我們經常須要用xml來界說一些標准,在零丁運轉讀取的時刻固然不會有成績,但這些xml是常常是放在jar包裡的,如許一來,這些器械就找不出來了。文頂用到的xml界說以下:

<?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>

上面來看代碼:

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

這段代碼 寫在Java Project中,個中user.xml放在src根目次下,類在src/com/jianxin/xml下,很明顯運轉以上代碼是可以出來成果的,但假如把以上代碼打包,這個jar包內的目次為
com/jianxin/xml
user.xml
而這裡辦法內照樣去src下去找user.xml,就算把src/從途徑中去失落,依然沒法定位到jar中的user.xml上。
這重要是由於jar包是一個零丁的文件而非文件夾,相對不克不及經由過程"file:/d:.../user.xml"這類情勢來對文件定位,所以即便是絕對途徑,也沒法定位到jar文件內的文件。
那末把xml打入jar包,不管user.xml在哪一個目次下,jar包中的類都可以找到,這會是理想嗎?
固然不是,我們可以用類裝載器(ClassLoader)來做到:
1)ClassLoader是類加載器的籠統類。它可以運轉時靜態的獲得加載類的運轉信息。可以如許說,當我們挪用xml.jar中的ReadXML類時,JVM加載進ReadXML類,並記載下ReadXML運轉時信息(包含地點jar包的根途徑信息)。而ClassLoader類中的辦法 可以贊助我們靜態獲得這些信息:
a.public URL getResource(String),查找且有給命名稱的資本。
b.public InputStream getResourceAsStream(String name),前往指定資本輸出流
2)ClassLoader是abstract的,弗成能實例化。我們真正寫代碼的時刻,是經由過程Class類中的getResource和getResourceAsStream辦法 ,這兩個辦法會拜托ClassLoader中的getResource和getResourceAsStream辦法。如今對下面辦法停止重寫:


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

如許,打包之前運轉是沒有成績的,打成包後,仍然是可以運轉找到數據的~。
在這裡我感到最主要的就是獲得Class同時會獲得jar根目次信息,同時ClassLoader也會有所轉變,這點須要留意一下,至於究竟是甚麼轉變,今朝我也說不下去,只是碰著了如許的成績。所以籌劃看一本Java比擬底層的書,以讓本身在為他人封裝器械的時刻加倍得心就手,一向逗留在運用條理的我們,也是時刻深刻懂得一下JVM了。
比來年夜部門時光都是在開辟,說好的jira能夠會更晚些,做的進程中,做是用了一下dwr,下篇對其停止描寫~~~

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved