java - 类加载器加载错误的文件

标签 java classloader

我使用此代码片段获取一个文件作为输入流。文件 version.txt 打包在我的应用程序的 jar 中,位于最上层的文件夹中。

InputStream resource = getClass().getClassLoader().getResourceAsStream("version.txt");

这几乎一直有效。但是对于一个用户来说,它正在获取另一个不在我的 jar 中的 version.txt。我如何确保这会加载我的 jar 中的特定 version.txt 文件?

最佳答案

当您说“最上层文件夹”时,您指的是默认包吗?如果是这种情况,您必须确保您的 JAR 在类路径中早于提供其他 version.txt 文件的任何内容,因为 Java 会沿着类路径搜索,直到找到第一个匹配项。

由于很难确保您的 JAR 始终位于第一位,因此您确实应该将 version.txt 文件放在非默认包中,例如:

com.yourcompany.yourproject.version

然后您需要修改代码以找到它:

Stream resource = getClass().getClassLoader().getResourceAsStream("com/yourcompany/yourproject/version/version.txt");

使用默认包是一种反模式。

关于java - 类加载器加载错误的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1497805/

相关文章:

Java(生成不重复的数字)

java - 签名 Java Applet 中的嵌套类

java - 使用单个美元符号 `$` 作为 java 类名有什么风险吗?

jdbc - Jython CLASSPATH、sys.path 和 JDBC 驱动程序

java - 文件输入流在编译器中工作正常,但在构建后无法工作

java - 从类搜索路径中的 jar 加载并实例化类

c# - .NET中是否有与Java的ClassFileTransformer等效的文件? (一种替换类的方法)

java - 如何访问无状态 session Bean 中的 SFSB

java - 如何处理 a :href 的值

Java类加载器: findClass is not called again after ClassNotFoundException occurs