我有一个我需要阅读的文本文件,我在这里使用这个在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()吗?
答案 0 :(得分:0)
首先,不再推荐使用getClassLoader(),因为java 9(或者可能是更新的版本)
如果您从MenuController类提供的代码行?
如果是,MenuController.class.getResource
或this.getClass().getResources
将您指向其目录:src/controllers/
,则在此路径中添加files/WorldState1.txt
。您需要使用..
构建相对路径或使用其他“起点”,例如SomeClassInSRCFolder.class.getResource("files/WorldState1.txt)
答案 1 :(得分:0)
基本上问题是我没有使用正确的路径。我最终做的是
GameReader.readFile(this.getClass().getResourceAsStream("WorldState1.txt"));
我还必须使用
读取文件new BufferedReader(new InputStreamReader(resource, StandardCharsets.UTF_8)).lines().collect(Collectors.toList());
而不是Files.readAllLines();因为它现在是一个流。希望这有助于其他任何人处理同样的问题。
答案 2 :(得分:0)
我遇到了同样的问题...文件位于我的jar文件中,按预期路径进行。该项目在IDE(Intellij)内运行良好,但是Jar无法加载我的某些资产。
问题是,我的开发工作站是Windows计算机,它对目录和文件名不区分大小写,但是Java用于读取JAR中文件的文件访问机制是区分大小写的。
因此,从IDE运行时,在“ data / zones / dynamic / myart.png”可以正常工作的地方,JAR无法工作,直到我将其更改为“ data / Zones / Dynamic / myart.png”。 ...只是这两个大写错误使资源无法找到...在Linux上进行开发的人们没有这个问题,因为整个系统区分大小写,所以他们习惯于谨慎处理这些事情。 / p>
因此,如果从JAR运行时您的代码找不到资产,但是文件在那里,请仔细检查路径/文件名是否大小写。
记住:检查一个罐子的内容很容易,只需将其重命名为.zip并打开/提取。
祝你好运!