Как прочитать байты ресурса изображения, расположенного во вложенном JAR? - PullRequest
0 голосов
/ 25 июня 2018

Я пытаюсь прочитать байты изображения PNG, связанного с ресурсами JAR. Файл находится в каталоге src/main/resources.

Вот мой код:

byte[] bytes = {};
final InputStream defaultImageStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("/defaultLogo.png");
new DataInputStream(defaultImageStream).readFully(bytes);

Код выполняется на сервере Wildfly 12, расположенном в JAR, включенном в EAR как EJB.

Кажется, что вместо того, чтобы извлечь ресурс, который я запрашивал, getResourceAsStream возвращает вложенную банку:

enter image description here

Как я могу получить это изображение?

Дополнительная информация:

  • Я пытался использовать как взорванный, так и не взорванный JAR в EAR. Те же результаты.
  • Путь к ресурсу кажется правильным. Префикс перед "/ resources" заканчивается в методе, возвращающем NULL.
  • Я попытался использовать загрузчик классов Class вместо контекста потока. Те же результаты.
  • Я предполагал пройти через все записи в прилагаемом JAR-файле самостоятельно, но это кажется излишним и сложным: поскольку у меня есть JarInputStream и нет JarFile, как бы я прочитал данные, соответствующие записи?

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Я думаю, что ваш код работает как задумано.Рассмотрение экземпляра DataInputStream мало что скажет.Посмотрите на содержание, я думаю, что это изображение, которое вы хотите.

0 голосов
/ 25 июня 2018

Вы правильно думаете, JarInputStream будет служить для вас целью.

Ваш код должен быть примерно таким, как показано ниже -

 try {
        JarInputStream jarIS = new JarInputStream(new FileInputStream(
                "jarfilePath"));

        JarEntry entry = null;
        while ((entry = jarIS.getNextJarEntry()) != null) {
            String name = entry.getName();
            if (name.endsWith("defaultLogo.png")) {
                System.out.println( "You got the PNG File"+entry.getAttributes().toString() );
                //Now handle your stream as per your requirement.

            }
        }
    } catch (Exception e) {
    }
...