【发布时间】:2022-01-20 12:14:11
【问题描述】:
试图解决非常简单和常见的问题,因为我认为问题是从 jar 中读取文件。问题: 我在根目录中有一个带有 f.txt 的.jar。我想从文件中读取值并使用 class.getClassLoader().getResourceAsStream("f.txt")。 当我在这个单一的罐子上运行测试时,它的工作很完美。 但是当我将我的 jar 添加到另一个项目中,该项目有另一个具有同名文件 f.txt 的 b.jar 时,有时我会从该文件而不是我的文件中读取值。
有什么方法可以从我的 jar 中正确读取我的资源,而不是同名的随机资源?无法提供代码,因为现在不在家。
总结,我有一个带有 a.jar 和 b.jar 的项目,它们的根目录下都有 f.txt。我想始终从 a.jar 读取 f.txt,而无法从 b.jar
读取【问题讨论】:
-
使用更独特的文件名(可能包括您的包名作为前缀,例如
com.example.myproject.f.txt)。 -
这正是资源应该放在包中的原因。它为它们提供了一个对您的应用程序或库来说是唯一的命名空间,就像您的类一样,从而大大降低了冲突的可能性。这也是
MyApplication.class.getResource("f.txt")默认情况下会在与 MyApplication 相同的包中查找的原因:默认行为是最佳实践。 -
但 gradle 将所有资源放在根目录下,而不是与类放在同一个包中。其惊人的解决方案,但需要手动工作或一些 gradle 魔法(我无法解决它((()