Как читать файлы в папке inputtream - PullRequest
5 голосов
/ 10 января 2012

У меня есть файл Jar, который я создал с помощью сторонней библиотеки. Когда я упаковал JAR-файл, я включил в него несколько XML-файлов в папке с именем data

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

Теперь я хотел прочитать папку внутри jar-файла и согласно документации сторонней библиотеки. Я мог бы получить загрузчик классов и прочитать папку как inputtream, как это.

ClassLoader clsLoader = myService.getClassLoader();
InputStream accountsStream =  clsLoader.getResourceAsStream("data");

Вопрос в том, как мне составить список всех файлов из входного потока и проанализировать его один за другим?

Спасибо

EDIT Добавленная информация:

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 ]

2 голосов
/ 10 января 2012

Когда я упаковал файл jar, я включил в него несколько файлов xml в папке с именем data

  1. Также включил список (например) data/listOfXML.txt вв то же время.
  2. Получить список в качестве ресурса.
  3. Прочитать список, чтобы получить имена файлов XML
2 голосов
/ 10 января 2012

(Извините - игнорируйте мой ответ - вот лучший:)

Как мне перечислить файлы в файле 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);
   }
}

Что делает его хрупким, так это то, что он зависит от вашего jarfile, имеющего определенное имя, от отсутствия внутри другого jarfile и так далее. Я уверен, что есть более элегантный способ ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...