我正在试图弄清楚如何在我的Java程序中添加大量图像,而无需在代码中添加每个文件名。
因此,我想将所有.png
张图片放入正确的文件夹中,然后将其放入IconImage
,然后将其放入ArrayList
。
我现在得到的是这个。
private void fillList()
{
File[] files = new File("C:/Users/marre/Google Drive/Java/lek/imageplay/src/img").listFiles();
for (File f : files)
{
if (f.isFile())
{
ImageIcon tempIcon = new ImageIcon(getClass().getResource("/img/"+f.getName()));
List.add(tempIcon);
}
}
}
这就像我想要的方式来获取所有图像的名称。但该文件只从绝对文件路径读取。
我可以使用什么来获得相同的结果,但是在.jar文件中有效(因此它从src/img/
读取而不是整个c:/ bla bla
..)?
答案 0 :(得分:0)
我不确定这是否有用但我在尝试获取jar文件中的文件时遇到了类似的问题。如果这对您有用,我的方法是使用ClassLoader
获取jar中文件的URL:
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
URL url = classLoader.getResource("src/img/");
检查jar内部以确保图像的目录结构,以便指定正确的相对路径。
请记住,jar是一个打包的表单,因此很可能会返回一个压缩文件(而不是一个简单的File对象)。你可能不得不涉足ZipFile
。
ZipFile folderInsideJar = new ZipFile(new File(url.getPath());
Enumeration<? extends ZipEntry> entries = folderInsideJar.entries();
while (entries.hasMoreElements()) {
// ideally this would be your image file, zipped
ZipEntry childFile = entries.nextElement();
// ... etc ...
}
对于JBoss等环境,您可能还会获得虚拟文件(vfsfile / vfszip)。重点是,您可以通过查看结果URL.getProtocol()确定您要处理的内容。
ImageIcon也会显示constructor that takes a URL。在手动尝试检索zip文件之前,您可以试着尝试一下它是否处理“jar内部资源”案例。