2012-01-10 73 views
3

我有使用第三方庫創建的Jar文件。 當我打包的jar文件,我包括一個文件夾名爲裏面幾個XML文件數據如何讀取文件夾輸入流中的文件

data 
    - file1.xml 
    - file2.xml 
    - file3.xml 

現在,我想讀的jar文件中的文件夾,並按照第三的文檔第三方庫 我可以得到類加載器並像這樣讀取文件夾作爲inputstream。

ClassLoader clsLoader = myService.getClassLoader(); 
InputStream accountsStream = clsLoader.getResourceAsStream("data"); 

問題是,我如何列出輸入流中的所有文件並逐個解析它?

感謝

編輯 新增信息:

How do I access resources that I put into my service or module archive file? 

http://axis.apache.org/axis2/java/core/faq.html#b1

對不起,這個問題本來應該具體到Apache Axis的,但我很困惑一點點,如果它是一個Java的具體問題也。

在使用類加載器獲取輸入流到文件夾之後,如何將所有文件列入該文件夾並逐一讀取?

我的代碼中的步驟將包含在內。

  1. 獲取一個InputStream到該文件夾​​
  2. 列表從輸入流中的所有文件
  3. 通過閱讀它一個一個
+0

什麼是您使用的第三方庫,和/或可以給你是它的文檔的鏈接以及的名字嗎? – jefflunt 2012-01-10 02:42:07

+0

嗨,它的Apache Axis。 HTTP://axis.apache。org/axis2/java/core/faq.html#b1當我打包我的服務時,我想讓它訪問模塊存檔中的文件夾。謝謝 – 2012-01-10 02:46:41

回答

2

(對不起 - 忽略我的答案 - 這裏有一個更好的:)

How do I list the files inside a JAR file?

這是一個相當脆弱的解決方案,但你可能剛剛看了你自己的jar文件:

File file = new File(System.getProperty("user.dir") + "/jarname.jar"); 
JarFile jfile = new JarFile(file); 
Enumeration e = jfile.entries(); 
while (e.hasMoreElements()) { 
    ZipEntry entry = (ZipEntry)e.nextElement(); 
    String path = entry.getName(); 
    if(path.startsWith("/path/within/jarfile/") && path.endsWith(".xml")) { 
     MyClass.loadResourceAsStream(path); 
    } 
} 

是什麼使得它十分脆弱在於它依賴於具有特定名稱的jar文件,不被其他jar文件裏面,等等。我敢肯定有一個更優雅的方式......

1

當我打包的jar文件,我包括一個文件夾在裏面的幾個XML文件命名爲數據

  1. 還包括列表稱爲(例如)data/listOfXML.txt
  2. 獲取列表作爲資源。
  3. 閱讀列表以獲得XML文件