getResource("path") 在 Intellij 中有效,但在 jar 文件中无效
getResource("path") works in Intellij but not in jar file
我有一个需要阅读的文本文件,我在其中使用了在 Intellij 中有效但在打包的 jar 文件中无效的 LoC。我不想不使用 InputStreamReader,因为我已经创建了一个自己的 Reader class。我从 "src/controllers/MenuController" 中的文件读取,WorldState1.txt 在 "src/files/worldstate1.txt".
中
GameReader.readFile(this.getClass().getClassLoader().getResource("files/WorldState1.txt").getPath());
我是否遗漏了什么或者我误解了 getResource()?
首先,自 java 9(或可能自较新版本以来)
,不建议再使用 getClassLoader()
如果您从 MenuController 提供的代码行 class?
如果是这样,MenuController.class.getResource
或 this.getClass().getResources
将您指向其目录:src/controllers/
并向此路径添加 files/WorldState1.txt
。您需要使用 ..
或使用另一个 "startingpoint" 来构建相对路径,例如 SomeClassInSRCFolder.class.getResource("files/WorldState1.txt)
本质上问题是我没有使用正确的路径。我最后做的是
GameReader.readFile(this.getClass().getResourceAsStream("WorldState1.txt"));
我还必须使用
读取文件
new BufferedReader(new InputStreamReader(resource, StandardCharsets.UTF_8)).lines().collect(Collectors.toList());
而不是 Files.readAllLines();因为它现在是一个流。希望这对处理相同问题的其他人有所帮助。
我遇到了同样的问题...文件在我的 jar 文件中,路径符合预期。项目 运行 在 IDE (Intellij) 中运行良好,但 Jar 无法加载我的一些资产。
问题是,我的开发工作站是一台 Windows 机器,它对目录和文件名不区分大小写,但文件访问机制 Java 用于读取JAR 区分大小写。
所以,我有 "data/zones/dynamic/myart.png",当 IDE 中的 运行 工作时,JAR 将无法工作,直到我将其更改为 "data/Zones/Dynamic/myart.png".. . 只是那两个大写错误使得资源无法找到...在 Linux 上开发的人没有这个问题,因为整个系统是区分大小写的,他们习惯于小心这些事情.
因此,如果您的代码在 运行 从 JAR 中找不到您的资产,但文件在那里,请仔细检查 path/filename 是否正确。
记住:检查 jar 的内容很容易,只需将其重命名为 .zip 和 open/extract。
祝你好运!
我有一个需要阅读的文本文件,我在其中使用了在 Intellij 中有效但在打包的 jar 文件中无效的 LoC。我不想不使用 InputStreamReader,因为我已经创建了一个自己的 Reader class。我从 "src/controllers/MenuController" 中的文件读取,WorldState1.txt 在 "src/files/worldstate1.txt".
中GameReader.readFile(this.getClass().getClassLoader().getResource("files/WorldState1.txt").getPath());
我是否遗漏了什么或者我误解了 getResource()?
首先,自 java 9(或可能自较新版本以来)
,不建议再使用 getClassLoader()如果您从 MenuController 提供的代码行 class?
如果是这样,MenuController.class.getResource
或 this.getClass().getResources
将您指向其目录:src/controllers/
并向此路径添加 files/WorldState1.txt
。您需要使用 ..
或使用另一个 "startingpoint" 来构建相对路径,例如 SomeClassInSRCFolder.class.getResource("files/WorldState1.txt)
本质上问题是我没有使用正确的路径。我最后做的是
GameReader.readFile(this.getClass().getResourceAsStream("WorldState1.txt"));
我还必须使用
读取文件new BufferedReader(new InputStreamReader(resource, StandardCharsets.UTF_8)).lines().collect(Collectors.toList());
而不是 Files.readAllLines();因为它现在是一个流。希望这对处理相同问题的其他人有所帮助。
我遇到了同样的问题...文件在我的 jar 文件中,路径符合预期。项目 运行 在 IDE (Intellij) 中运行良好,但 Jar 无法加载我的一些资产。
问题是,我的开发工作站是一台 Windows 机器,它对目录和文件名不区分大小写,但文件访问机制 Java 用于读取JAR 区分大小写。
所以,我有 "data/zones/dynamic/myart.png",当 IDE 中的 运行 工作时,JAR 将无法工作,直到我将其更改为 "data/Zones/Dynamic/myart.png".. . 只是那两个大写错误使得资源无法找到...在 Linux 上开发的人没有这个问题,因为整个系统是区分大小写的,他们习惯于小心这些事情.
因此,如果您的代码在 运行 从 JAR 中找不到您的资产,但文件在那里,请仔细检查 path/filename 是否正确。
记住:检查 jar 的内容很容易,只需将其重命名为 .zip 和 open/extract。
祝你好运!