如何读取文件夹输入流中的文件

时间:2012-01-10 02:38:38

标签: java axis2 java-io

我有一个使用第三方库创建的Jar文件。 当我打包jar文件时,我在其中包含几个xml文件,名为 data

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

现在,我想阅读jar文件中的文件夹,并根据第三方库的文档 我可以得到类加载器并像这样读取文件夹作为输入流。

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. 将输入流添加到文件夹
  2. 列出该输入流中的所有文件
  3. 逐一阅读

2 个答案:

答案 0 :(得分: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 :(得分:2)

  

当我打包jar文件时,我在其中包含了几个xml文件,名为data

  1. 同时包含一个名为(例如)data/listOfXML.txt的列表。
  2. 获取列表作为资源。
  3. 阅读列表以获取XML文件的名称