从可执行JAR文件递归读取图像

时间:2015-05-24 18:41:55

标签: java arraylist jar java-8 executable-jar

我试图通过首先将它们从磁盘读取到arraylist然后遍历arraylist来显示存储在BufferedImage中的多个ArrayList<BufferedImage>元素。由于图像被组织到文件系统上的子文件夹中,我用

将它们读入arraylist
private void storeImages(final File folder) {
    for (final File fileEntry : folder.listFiles()) {
        if (fileEntry.isDirectory()) {
            storeImages(fileEntry);// recursively iterates across all
                                    // subdirectories in folder
        } else {
            try {
                imageList.add(ImageIO.read(fileEntry));
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

如果我使用JFileChooser选择要调用storeImages的目录,则代码可以正常工作。但是,我想将图像打包成一个可执行的JAR文件,这样图像就不必单独分发,因此用户不必在磁盘上找到存储图像的位置。为了尝试从JAR中读取文件,我尝试了

storeImages(new File(getClass().getResource("/images").toString());

但这会引发NullPointerException。如果push推进,我可以从文件系统中读取图像,但我更愿意从JAR文件中读取它们。我究竟应该怎样做才能阅读JAR中的图像?

1 个答案:

答案 0 :(得分:2)

不幸的是,在您想要自动浏览jar文件的情况下,您的代码将无法重复使用,因为您无法从jar文件的内容创建File实例。这篇文章对此进行了介绍:Unable to create File object for a file in Jar

还有一个类似的问题提出了一个可能的解决方案:How do I list the files inside a JAR file?