如何读取嵌套JAR内图像资源的字节?

时间:2018-06-25 13:29:57

标签: java wildfly inputstream ear

在尝试读取与JAR资源捆绑在一起的PNG图像的字节时,我很费劲。该文件位于src/main/resources目录中。

到目前为止,这是我的代码:

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

该代码在Wildfly 12服务器上执行,该服务器位于EAR中作为EJB包含的JAR中。

getResourceAsStream似乎没有检索我要的资源,而是返回了封闭的jar:

enter image description here

如何获取该图片?

其他信息:

  • 我在EAR中尝试了爆炸和非爆炸JAR。结果相同。
  • 该资源的路径似乎正确。以“ / resources”为前缀的方法以返回NULL的方法结束。
  • 我尝试使用Class的classloader而不是线程上下文的classloader。结果相同。
  • 我预想自己会仔细阅读随附的JAR的所有条目,但这似乎过于矫kill且困难:由于我有一个JarInputStream而没有一个JarFile,我将如何读取与一个JAR对应的数据条目?

2 个答案:

答案 0 :(得分:2)

我认为您的代码按预期工作。查看DataInputStream实例不会告诉您太多信息。看内容,我想这就是你想要的图像。

答案 1 :(得分:-1)

您的想法正确,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) {
    }