在JAR文件内的Res-Folder中创建数据

时间:2015-07-24 14:56:55

标签: java executable-jar

对于我的一个项目我发现有必要将一个给定的int [] colorvalues作为png文件安全。 png将表示图块的地图,其由颜色值表示。 BufferedImage的生成和保存过程已经很好了。

public BufferedImage getTileImage() {
    BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
    for (int i = 0; i < height; i++) {
        for (int j = 0; j < width; j++) {
            image.setRGB(j, i, tiles[j+i*width].getType());
        }
    }
    return image;
}

public void safeMap(String mapname) {
    File file = new File("res/maps/"+mapname+".png");
    try {
        ImageIO.write(getTileImage(), "png",file );
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

当我将其导出为可执行的JAR文件时出现问题,因为ImageIO.write() - 方法似乎无法在JAR文件中使用相对路径正常工作。 (我的猜测是你只能阅读结构内部,而不是写)

这个问题的解决方案是什么?有没有办法实现这一点,而不使用外部ressource文件夹?

2 个答案:

答案 0 :(得分:0)

不要将其保存到JAR文件中。我还有一个游戏,我需要创建将进入JAR文件的文件。我通过在IDE中执行代码来创建这些文件。这些文件进入最终将放入我的JAR的资源目录。在我的情况下,目录在/ src /中。但是如果你使用标准目录布局的Maven,它们很容易进入src / main / resources。

如果您在IDE之外执行此操作,而不是开发工作的一部分,那么您可以将其存储在tempt文件夹或user.home之外的文件夹中。要获取进入系统临时文件夹的临时文件,您可以执行以下操作...

File colorsFile = File.createTempFile("color_generator", ".png"); 

答案 1 :(得分:0)

如果图像是游戏的资产(由您为所有玩家生成),请在项目的资源文件夹中生成图像,并在生成jar文件时包含它。

如果图像是动态生成的(由玩家生成),则无法将其放入jar中,因为您不应该动态更改jar(其他玩家也不会看到它,或者):您必须将它放在服务器/数据库中并构建一个Web服务来共享它。

相关问题