【问题标题】:How to Read files in an folder inputstream如何读取文件夹输入流中的文件
【发布时间】:2012-02-06 13:09:04
【问题描述】:

我有一个使用 3rd 方库创建的 Jar 文件。 当我打包 jar 文件时,我在一个名为 data

的文件夹中包含了几个 xml 文件
data
    - file1.xml
    - file2.xml
    - file3.xml

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

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. 一一阅读

【问题讨论】:

  • 您使用的第 3 方库是什么,和/或您能否提供其文档的链接?
  • 嗨,它的 Apache Axis。 axis.apache.org/axis2/java/core/faq.html#b1 当我打包我的服务时,我希望它能够访问模块存档中的文件夹。谢谢

标签: java axis2 java-io


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    当我打包 jar 文件时,我将其中的几个 xml 文件包含在一个名为 data 的文件夹中

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多