我知道这个问题已经问了好几次了,但我还是不能用那些解决方案来解决它。
我有一个maven项目,还有一个Config.java文件,位于consumer/src/main/java
,内容如下:
import java.util.Properties;
public class Config {
Properties configFile;
public Config() {
configFile = new Properties();
try {
configFile.load(this.getClass().getClassLoader().
getResourceAsStream("property_table.config.txt"));
} catch(Exception e) {
e.printStackTrace();
}
}
public String getProperty(String key) {
String value = this.configFile.getProperty(key);
return value;
}
public static void main(String[] args) {
Config config = new Config();
System.out.println("URL: " + config.getProperty("URL"));
System.out.println("PASSWORD: " + config.getProperty("PASSWORD"));
}
}
我一直得到nullpointer exception
。我知道这是因为它找不到文件property_table.config.txt
。
一开始我把property_table_config.txt
文件和www.example.com文件放在同一个文件夹(consumer/src/main/java/
)中Config.java,然后尝试使用/property_table_config.txt
和“property_table_config.txt”,但它们都不起作用。
然后我试着用绝对路径,不起作用。试着用/main/java/property_table_config
,也不起作用。
然后我看到了这个解决方案:https://stackoverflow.com/a/2103625/8159477。所以我创建了一个名为resources的目录,并将其放在主文件夹下(即文件夹的路径为consumer/src/main/resources
),然后在resources
下创建一个子文件夹config
。在将property_table_config.txt
文件放在那里之后,我将代码更改为:
configFile.load(this.getClass().getClassLoader().getResourceAsStream("/config/property_table.config.txt"));
但还是不行。谁能给予点提示吗?任何建议都将不胜感激!!
4条答案
按热度按时间xqkwcwgp1#
According to
Class.getResourceAsStream
:This method delegates to this object's class loader. If this object was loaded by the bootstrap class loader, the method delegates to ClassLoader.getSystemResourceAsStream.
Before delegation, an absolute resource name is constructed from the given resource name using this algorithm:
modified_package_name/name
Where the modified_package_name is the package name of this object with '/' substituted for '.' ('\u002e').
This is how I understand the comments:
ClassLoader.getResourceAsStream
, send the absolute path from package root, but omitting the first/
.Class.getResourceAsStream
, send either a path relative the the currentClass
object (and the method will take the package into account), or send the absolute path from package root, starting with a/
.But in addition to this, you need to be cognizant of your build system. With maven, resource files are stored under
src/main/resources
.So, in your case, I believe making the following changes should resolve the issue:
src/main/resources
.I've tried this with a similar setup, and it works as expected.
jdg4fx2g2#
ClassLoader().getResourceAsStream()
只在类路径中查找文件。您需要将配置文件放在类路径的目录中。所以,你有选择:
c:\my_projects\test-project\config\my_config.properties
,并且c:\my_projects\test-project\
位于类路径中,则getResourceAsStream
调用将为ClassLoader().getResourceAsStream("config/my_config.properties")
getResourceAsStream("config/my_config.properties")
的起始点顺便说一句:Maven不会将src/main/java/目录中的任何内容放入jar文件(如果您没有为资源插件显式指定它)
如果您将Eclipse之类的IDE与Maven项目一起使用,那么src/main/resources是构建类路径的一部分。请仔细检查它是否在那里,如果不在,请执行“更新Maven项目”或手动添加它。
不过,只有在IDE中运行项目时,ClassLoader才会从src/main/resources文件夹中看到属性文件,而不是从独立的Jar文件中(如果您没有打包文件或在类路径中提供位置)。
apeeds0o3#
嗨你能试试这个吗
cwxwcias4#
你能试试下面的代码吗。
配置类.getResourceAsStream(“属性_表.配置. txt”)
更新:这是我试过的代码。
我把property_table. config. txt文件放在测试包中,它工作正常。