2012-01-10 53 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文件