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

6

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

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. 逐一读取这些文件

你正在使用哪个第三方库?或者你能给我们提供它的文档链接吗? - jefflunt
嗨,这里是Apache Axis。http://axis.apache.org/axis2/java/core/faq.html#b1 当我打包我的服务时,我希望它能够访问模块归档文件中的文件夹。谢谢。 - Mark Estrada
2个回答

2
当我打包jar文件时,我在名为data的文件夹中包含了几个xml文件。
同时还要包括一个名为(例如)data/listOfXML.txt的列表。
将该列表作为资源获取。
读取该列表以获取XML文件的名称。

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

它的脆弱性在于它依赖于你的jar文件具有特定的名称,不在另一个jar文件内等因素。我相信有一种更优雅的方式...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接