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

Mar*_*ada 5 java axis2 java-io

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

data
    - file1.xml
    - file2.xml
    - file3.xml
Run Code Online (Sandbox Code Playgroud)

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

ClassLoader clsLoader = myService.getClassLoader();
InputStream accountsStream =  clsLoader.getResourceAsStream("data");
Run Code Online (Sandbox Code Playgroud)

问题是,如何列出输入流中的所有文件并逐个解析?

谢谢

编辑 补充信息:

How do I access resources that I put into my service or module archive file?
Run Code Online (Sandbox Code Playgroud)

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

对不起,这个问题应该是针对Apache Axis的,但如果它也是一个特定于Java的问题,我会感到困惑.

使用类加载器获取文件夹的输入流后,如何将所有文件列入该文件夹并逐个读取?

我的代码中的步骤将包括在内.

  1. 获取输入流到文件夹中
  2. 列出该输入流中的所有文件
  3. 逐一阅读

Rus*_*ser 2

(抱歉 - 忽略我的答案 - 这是一个更好的答案:)

如何列出 JAR 文件中的文件?

这是一个相当脆弱的解决方案,但您可以读取自己的 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);
   }
}
Run Code Online (Sandbox Code Playgroud)

它脆弱的原因在于它取决于您的 jarfile 具有特定的名称,而不是位于另一个 jarfile 中,等等。我确信有一种更优雅的方式......