从可执行 JAR 文件中递归读取图像
Recursively read images from an executable JAR file
我试图显示存储在 ArrayList<BufferedImage>
中的多个 BufferedImage
元素,方法是首先将它们从磁盘读取到数组列表,然后遍历数组列表。由于图像被组织到文件系统上的子文件夹中,我将它们读入数组列表
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
到 select 调用 storeImages
的目录,那么代码可以正常工作。但是,我想将图像打包成一个可执行的 JAR 文件,这样图像就不必单独分发,用户也不必在磁盘上找到存储图像的位置。为了尝试从 JAR 中读取文件,我尝试了
storeImages(new File(getClass().getResource("/images").toString());
但这会引发 NullPointerException
。如果到了紧要关头,我 可以 从文件系统中读取图像,尽管我更愿意从 JAR 文件中读取它们。我究竟应该怎么做才能从 JAR 中读取图像?
不幸的是,如果您想自动浏览 jar 文件,您的代码将无法按原样重用,因为您无法从 jar 文件的内容创建 File
个实例。 post:Unable to create File object for a file in Jar
还有一个类似的问题提出了一个可能的解决方案:How do I list the files inside a JAR file?
我试图显示存储在 ArrayList<BufferedImage>
中的多个 BufferedImage
元素,方法是首先将它们从磁盘读取到数组列表,然后遍历数组列表。由于图像被组织到文件系统上的子文件夹中,我将它们读入数组列表
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
到 select 调用 storeImages
的目录,那么代码可以正常工作。但是,我想将图像打包成一个可执行的 JAR 文件,这样图像就不必单独分发,用户也不必在磁盘上找到存储图像的位置。为了尝试从 JAR 中读取文件,我尝试了
storeImages(new File(getClass().getResource("/images").toString());
但这会引发 NullPointerException
。如果到了紧要关头,我 可以 从文件系统中读取图像,尽管我更愿意从 JAR 文件中读取它们。我究竟应该怎么做才能从 JAR 中读取图像?
不幸的是,如果您想自动浏览 jar 文件,您的代码将无法按原样重用,因为您无法从 jar 文件的内容创建 File
个实例。 post:Unable to create File object for a file in Jar
还有一个类似的问题提出了一个可能的解决方案:How do I list the files inside a JAR file?