java - 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() 吗?
解决方案
我遇到了同样的问题...文件在我的 jar 文件中,按预期路径。该项目在 IDE (Intellij) 中运行良好,但 Jar 无法加载我的一些资产。
问题是,我的开发工作站是一台 Windows 机器,它对目录和文件名不区分大小写,但 Java 用于读取 JAR 中的文件的文件访问机制是区分大小写的。
因此,在从 IDE 运行时我有“data/zones/dynamic/myart.png”的地方,JAR 将无法工作,直到我将其更改为“data/Zones/Dynamic/myart.png”...只是这两个大写错误使资源无法找到......在Linux上开发的人没有这个问题,因为整个系统是区分大小写的,他们习惯于小心这些事情。
因此,如果您的代码在从 JAR 运行时找不到您的资产,但文件在那里,请仔细检查路径/文件名是否正确。
请记住:检查 jar 的内容很容易,只需将其重命名为 .zip 并打开/解压即可。
祝你好运!
推荐阅读
- string - 在 Clojure 中修剪不可打印字符的一般方法
- ios - OCMock:使用 OCMPartialMock 时,OCMVerify 次数得到错误计数
- form-recognizer - 表单识别器中的 TIFF 图像支持
- dataframe - 如何使用 Seq(..).toDF(..) 语法创建超过 22 列的 spark 数据框
- javascript - javascript 新闻提要做出反应
- javascript - 使用 axios 的动态、多个 API 调用
- javascript - 找不到变量导航
- python - 无法使用 beautifulsoup 提取嵌套在另一个标签内的标签
- c++ - 关于名称引用当前实例化以进行部分特化的问题
- c# - 使用反射通过字符串调用静态方法的问题