|
|
|
Как прочитать файл из ZIP'ки, что внутри ZIP'ки?
|
|||
|---|---|---|---|
|
#18+
На самом деле: Есть EAR'ка, внутри которой лежит JAR'ник, внутри которого есть файл, содержимое которого надо извлечь. Ну или просто узнать список классов, что лежат в JAR'нике. Пока нашел только одно решение: 1. JarFile jarFile = new JarFile(earLocation); и через JarFile#entries "доходим" до JAR'ки (JAR'ок может быть много и их имена заранее неизвестны); 2. jarFile.getInputStream(entry) - и вот этот поток "переливается" во временный файл; 3. И опять же через JarFile обрабатываем файл из п.2.: ищем нужный Entry и вытягиваем через InputStream его содержимое; 4. Повторяем 1-3 для всех JAR'файлов из EAR'ки. Решение не нравится тем, что приходится во временный файл что-то записывать - кажется лишним этапом (лишние риски + время: вполне возможно, что в этом JAR'нике нет нужного файла). Может, есть другое решение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2014, 19:29 |
|
||
|
Как прочитать файл из ZIP'ки, что внутри ZIP'ки?
|
|||
|---|---|---|---|
|
#18+
А делать это в рантайме зачем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2014, 19:35 |
|
||
|
Как прочитать файл из ZIP'ки, что внутри ZIP'ки?
|
|||
|---|---|---|---|
|
#18+
Вроде же на вход http://docs.oracle.com/javase/7/docs/api/java/util/zip/ZipInputStream.html можно просто поток подать? Т.ч. временный файл вроде не обязателен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.05.2014, 19:41 |
|
||
|
Как прочитать файл из ZIP'ки, что внутри ZIP'ки?
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevВроде же на вход http://docs.oracle.com/javase/7/docs/api/java/util/zip/ZipInputStream.html можно просто поток подать? Т.ч. временный файл вроде не обязателен. Точно не обязателен. Пример работы с zip архивом (правда без вложенного zip'а) sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1089609&msg=15921883 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.05.2014, 09:24 |
|
||
|
Как прочитать файл из ZIP'ки, что внутри ZIP'ки?
|
|||
|---|---|---|---|
|
#18+
За ZipInputStream/JarInputStream спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 10:19 |
|
||
|
Как прочитать файл из ZIP'ки, что внутри ZIP'ки?
|
|||
|---|---|---|---|
|
#18+
A+За ZipInputStream/JarInputStream спасибо. Class/ClassLoader.getResourceAsStream() вообще не вариант? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 10:20 |
|
||
|
Как прочитать файл из ZIP'ки, что внутри ZIP'ки?
|
|||
|---|---|---|---|
|
#18+
BlazkowiczA+За ZipInputStream/JarInputStream спасибо. Class/ClassLoader.getResourceAsStream() вообще не вариант? Наверняка здесь было уже, что Class/ClassLoader.getResourceAsStream() ищет запрашиваемый ресурс по очереди во всех jar'чиках из classpath, и найдя его в первом попавшемся, радостно его возвращает. Т.е. если искать Class/ClassLoader.getResourceAsStream("’META-INF/MANFEST.MF"), то результат сильно зависит от того, как перечислены jar'чики в classpath ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 15:27 |
|
||
|
Как прочитать файл из ZIP'ки, что внутри ZIP'ки?
|
|||
|---|---|---|---|
|
#18+
J.SergeНаверняка здесь было уже, что Class/ClassLoader.getResourceAsStream() ищет запрашиваемый ресурс по очереди во всех jar'чиках из classpath, и найдя его в первом попавшемся, радостно его возвращает. Т.е. если искать Class/ClassLoader.getResourceAsStream("’META-INF/MANFEST.MF"), то результат сильно зависит от того, как перечислены jar'чики в classpath Для манифеста в java.util.jar есть собственный API. Интересно, пофиксили ли багу с тем что манифест должен быть первой ZipEntity? Так как автор о манифесте не упоминает, логично предположить, что вопрос не в нем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 15:32 |
|
||
|
Как прочитать файл из ZIP'ки, что внутри ZIP'ки?
|
|||
|---|---|---|---|
|
#18+
Хм... кстати возникла мысль об дисковой оптимизации загрузки приложения из jar/war/ear. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 17:07 |
|
||
|
Как прочитать файл из ZIP'ки, что внутри ZIP'ки?
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, Class/ClassLoader.getResourceAsStream() тоже придется использовать. По-подробнее задача звучит так: 1. Есть некая коллекция JAR'ников (с названиями, соответствующими определенному шаблону - уже просто для ускорения поиска); 1.1. Каждый такой JAR'ник содержит до 1 (одной) реализации одного из 3х интерфейсов; 1.2. JAR'ник, содержащий такой класс, имеет в /META-INF несколько ресурсных файлов (не .properties) с неким [локализованным] описанием данной реализации интерфейса - шаблон названий таких файлов известен (но не известны локали, для которых они существуют - но их разумное количество ~ 5-6); 2. Надо: по запросу (с указанием локали) вернуть информацию об этих классах: полное название класса + локализованное описание (из ресурсного файла) + какой из 3х интерфейсов он (класс) реализует; 3. Решение должно работать на JBoss 4.2.3 GA и JBoss 7.1.1; Java 1.6+ 4. [часть] JAR'ников может быть в EAR'ке (а могут лежать и в "библиотечной" папке - просто россыпью). Пока планирую решать проблему таким образом: 1. По значению свойства "jboss.server.base.home" находим папку, в которой будем вести поиск; 2. Найдя JAR'ник с "шаблонным" названием, заглядываем в него: 2.1. Название класса извлекаем через JarEntry#getName(); 2.2. локализованные файлы-"дескрипторы" читаем через Class/ClassLoader.getResourceAsStream() (класс берем тот, что получили в предыдущем пункте) - предварительно через JarEntry#getName() узнав как эти файлы называются; 2.3. Какой интерфейс реализован определяем через Class#isAssignableFrom; Не нравится: сам старт: "jboss.server.base.home" содержит кучу левых каталогов. Завязаться на ${jboss.server.base.home}/deploy + ${jboss.server.base.home}/lib не могу: в JBoss 7.1.1 папка деплоя и "библиотечная" папка называются по-другому. "разгребать" EAR'ки пока планирую так: JarFile -> JarInputStream -> JarEntry + Class/ClassLoader.getResourceAsStream() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.05.2014, 19:14 |
|
||
|
Как прочитать файл из ZIP'ки, что внутри ZIP'ки?
|
|||
|---|---|---|---|
|
#18+
J.SergeНаверняка здесь было уже, что Class/ClassLoader.getResourceAsStream() ищет запрашиваемый ресурс по очереди во всех jar'чиках из classpath, и найдя его в первом попавшемся, радостно его возвращает. Именно так он себя и ведет - если JAR'ка лежит в EAR/lib; в противном случае Class#getResourceAsStream() работает корректно. Проблема в том, что мои JAR'ки как раз в EAR/lib и будут лежать скорей всего (в них нету ничего "энтерпрайзного": MDB, session beans, ...) - так что решил эти файлы "дескрипторов" читать через JarInputStream#read: "дошли" до нужного JarEntry и считали. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2014, 17:56 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=173&tid=2127123]: |
0ms |
get settings: |
5ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
47ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 210ms |
| total: | 340ms |

| 0 / 0 |
