从文件夹加载所有图像&从他们做出命名的图像

时间:2013-09-01 03:29:51

标签: java image object loading

标题有点漫无目的,但不确定描述它的最佳方式。还是一个Java newb(从Obj-C过渡)所以我知道如何编码但不确定是否/如何在java中专门应用它。

基本上,我想这样做:

ImageIcon a0amora = new ImageIcon(this.getClass().getResource("resource/" + "a0amora.png"));
ImageIcon a1act1 = new ImageIcon(this.getClass().getResource("resource/" + "a1act1.png"));
ImageIcon a2hello = new ImageIcon(this.getClass().getResource("resource/" + "a2hello.png"));
ImageIcon a3anyonethere = new ImageIcon(this.getClass().getResource("resource/" + "a3anyonethere.png"));
ImageIcon a4imhere = new ImageIcon(this.getClass().getResource("resource/" + "a4imhere.png"));
ImageIcon a5stuck = new ImageIcon(this.getClass().getResource("resource/" + "a5stuck.png"));
ImageIcon a6silence = new ImageIcon(this.getClass().getResource("resource/" + "a6silence.png"));
ImageIcon a7ashamed = new ImageIcon(this.getClass().getResource("resource/" + "a7ashamed.png"));
ImageIcon a8free = new ImageIcon(this.getClass().getResource("resource/" + "a8free.png"));
ImageIcon a9endact = new ImageIcon(this.getClass().getResource("resource/" + "a9endact.png"));

但是在一个程序中,它将读取文件夹中的所有PNG并创建一个以文件名命名的新ImageIcon,因此我不必手动分配每个PNG。

3 个答案:

答案 0 :(得分:0)

  1. 找到服务器上该目录的“真实路径”。用它来建立File对象。
  2. 为PNG创建FilenameFilter
  3. 在该源目录上使用File.listFiles(FilenameFilter)。这将返回包含对PNG文件的引用的File[]
  4. 假设图像在类路径上,就像松散的File资源一样。如果它们在Jar中,我们必须迭代Jar的ZipEntry个对象,以动态发现它包含的内容。

答案 1 :(得分:0)

我列出了目标目录中的文件,并将它们全部添加到Map这样的内容......

File  directory = new File("resource");
Map<String, ImageIcon> iconMap = new HashMap<String, ImageIcon>();

for (File file : directory.listFiles())
{
    // could also use a FileNameFilter
    if(file.getName().toLowerCase().endsWith(".png"))
    {
        iconMap.put(file.getName(), new ImageIcon(file.getPath()));
    }
}

答案 2 :(得分:-1)

如果您使用的是Java 8,可以尝试这样的方法:

public List<ImageIcon> get(){
    final FileFilter filter = f -> f.getName().endsWith(".png");
    final File res = new File(getClass().getResource("resource").getPath());
    return Arrays.asList(res.listFiles(filter)).stream().map(f -> new ImageIcon(f.getPath())).collect(Collectors.toList());
}

如果你不是,修改代码并不难,你会得到一般的想法。