在 JAR 文件内的 Res 文件夹中创建数据
Creating Data In A Res-Folder inside a JAR-File
对于我的一个项目,我发现有必要将给定的颜色值 int[] 保存为 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 文件内的相对路径。 (我的猜测是你只能读取结构内部,不能写入)
这个问题有什么好的解决方案?有没有办法在不使用外部资源文件夹的情况下实现这一点?
不要将其保存到 JAR 文件中。我还有一个游戏,我需要创建将进入 JAR 文件的文件。我通过在 IDE 中执行代码来创建这些文件。这些文件进入最终将放入我的 JAR 中的资源目录。在我的例子中,目录在 /src/ 中。但如果您使用具有标准目录布局的 Maven,它们很容易进入 src/main/resources。
如果您在 IDE 之外执行此操作,而不是开发工作的一部分,那么您可以将其存储在临时文件夹或 user.home 之外的文件夹中。要获取进入系统临时文件夹的临时文件,您可以这样做...
File colorsFile = File.createTempFile("color_generator", ".png");
如果图像是游戏的资产(由您为所有玩家生成),请在项目的资源文件夹中生成它,并在生成 jar 文件时包含它。
如果图片是动态生成的(由玩家),你不能把它放在罐子里,因为你不应该动态地改变罐子(其他玩家也不会看到它):你必须把它放在服务器上/在你的数据库中,并构建一个网络服务来共享它。
对于我的一个项目,我发现有必要将给定的颜色值 int[] 保存为 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 文件内的相对路径。 (我的猜测是你只能读取结构内部,不能写入)
这个问题有什么好的解决方案?有没有办法在不使用外部资源文件夹的情况下实现这一点?
不要将其保存到 JAR 文件中。我还有一个游戏,我需要创建将进入 JAR 文件的文件。我通过在 IDE 中执行代码来创建这些文件。这些文件进入最终将放入我的 JAR 中的资源目录。在我的例子中,目录在 /src/ 中。但如果您使用具有标准目录布局的 Maven,它们很容易进入 src/main/resources。
如果您在 IDE 之外执行此操作,而不是开发工作的一部分,那么您可以将其存储在临时文件夹或 user.home 之外的文件夹中。要获取进入系统临时文件夹的临时文件,您可以这样做...
File colorsFile = File.createTempFile("color_generator", ".png");
如果图像是游戏的资产(由您为所有玩家生成),请在项目的资源文件夹中生成它,并在生成 jar 文件时包含它。
如果图片是动态生成的(由玩家),你不能把它放在罐子里,因为你不应该动态地改变罐子(其他玩家也不会看到它):你必须把它放在服务器上/在你的数据库中,并构建一个网络服务来共享它。