如何在 Eclipse 中读取存储在导出的 jar 中的 png 文件

How to Read a png File Stored Within an Exported jar in Eclipse

提问人:WhiteKnight9801 提问时间:11/16/2023 更新时间:11/16/2023 访问量:28

问:

我观看了几个视频并访问了我能找到的关于从 jar 中读取文件的每个 stackoverflow 线程,但我发现的方法都不适合我。

我最近的尝试是构建一个 ResourceLoader 类,它在 ide 中运行良好,但是当我将其导出到可运行的 jar 时,它似乎无法找到文件。

下面是 ResourceLoader 类

public final class ResourceLoader {

    public static InputStream load(String path) {
        InputStream input = ResourceLoader.class.getResourceAsStream(path);
        if(input==null) {
            input = ResourceLoader.class.getResourceAsStream(File.separator+path);
        }
        return input;
    }

}
    

我的 png 文件存储在名为“textures”的文件夹中,该文件夹位于名为“res”的 src 文件夹中

Java JAR InputStream BufferedReader

评论

1赞 VGR 11/16/2023
File.separator+path←永远不要那样做。getResource 和 getResourceAsStream 的参数实际上是一个相对 URL,在所有平台上都应始终使用正斜杠 ()。你可能想要.将应用程序资源与加载它们的类放在同一个包中被认为是一种很好的做法,这样可以编写较短的调用,例如 .如有疑问,请检查 .jar 文件的内容。/ResourceLoader.class.getResourceAsStream("/textures/image.png")ResourceLoader.class.getResourceAsStream("image.png")
0赞 WhiteKnight9801 11/16/2023
按照您的建议执行后,它可以工作,但是,我必须将文字路径放在所需资源上。有没有办法添加文件夹中的所有 png 文件?
1赞 g00se 11/16/2023
将应用程序资源与加载它们的类放在同一个包中被认为是一种很好的做法不确定。首先,这可能会使资源遍布您的包树,而不是在一个合乎逻辑的位置,例如...... 我想说的是,从资源根开始,从逻辑上对资源进行分组。有没有办法添加文件夹中的所有 png 文件?不。并非没有黑客方法。你这样做的用例是什么?res
0赞 VGR 11/16/2023
“有没有办法添加文件夹中找到的所有png文件?”不。有些人可能会提出一些方法,但这些非法方法最终会失败。好消息是,这并不重要;您已经知道项目中有哪些文件,因此可以在应用程序中保留这些文件的硬编码列表。
0赞 VGR 11/16/2023
@g00se 他们不会到处都是胡椒粉。MainWindow 类使用的图像与该类位于同一包中。LoginWindow 类使用的图像与该类位于同一包中。图像并不比应用程序类本身更分散。但最重要的是......资源属于包的原因与类属于包的原因相同:大大减少与类路径上的其他库发生冲突的可能性。具有资源的多个库不是一件好事。/icon.png

答: 暂无答案