首页 > 解决方案 > getResource("path") 在 Intellij 中有效,但在 jar 文件中无效

问题描述

我有一个需要阅读的文本文件,我在其中使用了这个在 Intellij 中工作但不在打包的 jar 文件中工作的 LoC。我不想使用 InputStreamReader,因为我已经创建了一个自己的 Reader 类。我从“src/controllers/MenuController”中的文件读取,WorldState1.txt 在“src/files/worldstate1.txt”中。

GameReader.readFile(this.getClass().getClassLoader().getResource("files/WorldState1.txt").getPath());

有什么我遗漏的或者我误解了 getResource() 吗?

标签: javajarclassloader

解决方案


我遇到了同样的问题...文件在我的 jar 文件中,按预期路径。该项目在 IDE (Intellij) 中运行良好,但 Jar 无法加载我的一些资产。

问题是,我的开发工作站是一台 Windows 机器,它对目录和文件名不区分大小写,但 Java 用于读取 JAR 中的文件的文件访问机制是区分大小写的。

因此,在从 IDE 运行时我有“data/zones/dynamic/myart.png”的地方,JAR 将无法工作,直到我将其更改为“data/Zones/Dynamic/myart.png”...只是这两个大写错误使资源无法找到......在Linux上开发的人没有这个问题,因为整个系统是区分大小写的,他们习惯于小心这些事情。

因此,如果您的代码在从 JAR 运行时找不到您的资产,但文件在那里,请仔细检查路径/文件名是否正确。

请记住:检查 jar 的内容很容易,只需将其重命名为 .zip 并打开/解压即可。

祝你好运!


推荐阅读