我在conf / Config.properties位置创建了一个属性文件。该文件夹位于Eclipse中项目的根文件夹下。我还将其添加到.classpath。
我正在使用以下代码从此文件中读取数据:
InputStream in = getClass().getResourceAsStream("conf/Config.properties");
Properties properties = new Properties();
properties.load(in);
String fromEmail = properties.getProperty("emailID");
System.out.println("from email is " + fromEmail);
String fromEmailPass = properties.getProperty("emailPass");
String host = properties.getProperty("host");
这给出了错误:
java.lang.NullPointerException
at java.util.Properties$LineReader.readLine(Properties.java:418)
at java.util.Properties.load0(Properties.java:337)
at java.util.Properties.load(Properties.java:325)
at com.sendum.integration.activities.notifications.ActivityImplSendActivationEmail.activateEmail(ActivityImplSendActivationEmail.java:23)
如何从.properties文件中读取数据?
答案 0 :(得分:5)
getClass().getResourceAsStream("conf/Config.properties");
尝试从相对于您的类位置的路径加载资源。
使用:
getClass().getResourceAsStream("/conf/Config.properties");
(请注意前导/
这是绝对路径)或getClass().getClassLoader().getResourceAsStream("conf/Config.properties");
(请注意,您使用的是绝对路径,但不需要前导/
)编辑:我对您的目录结构和类路径感到困惑。根据您的评论我现在明白您的文件夹结构是:
<Project folder>
- src/
// .java files
- conf/
Config.properties
您说您已将conf
添加到类路径中。所以我知道你在Eclipse中有两个源文件夹。如果是这种情况,那么src
和conf
都是您的根包,您应该更改上面的命令,如下所示:
getClass().getResourceAsStream("/Config.properties");
或getClass().getClassLoader().getResourceAsStream("Config.properties");
答案 1 :(得分:3)
似乎getClass().getResourceAsStream("conf/Config.properties");
返回null。这意味着目前它没有找到该文件。
尝试使用getReasourceAsStream("./conf/Config.properties")
。这是相对路径,因为它从当前目录开始,然后找到conf/Config.properties
或尝试使用绝对路径getReasourceAsStream("/Users/user/filepath/conf/Config.properties")
有关类似信息,请参阅here。
答案 2 :(得分:0)
在您的信息流路径中,它会尝试从相对路径加载资源到您的班级位置。
将您的InputStream更改为
InputStream in = getClass().getResourceAsStream("../conf/Config.properties");
或以其他方式在InputStream中提供文件位置的完整路径
答案 3 :(得分:0)
尝试
getClass().getClassLoader().getResourceAsStream("conf/Config.properties");
答案 4 :(得分:0)
Try the below code for fetching the data from the properties file.
Properties prop = new Properties();
InputStream input = null;
input = this.getClass().getClassLoader().getResourceAsStream("conf/Config.properties");
// load a properties file
prop.load(input);
String str = prop.getProperty("key");//like userName
答案 5 :(得分:0)
您也可以执行以下操作。
public static void loadPropertiesToMemory() {
Properties prop = new Properties();
InputStream input = null;
String filePathPropFile = "configuration.properties";
try {
input = App.class.getClassLoader().getResourceAsStream(filePathPropFile);
prop.load(input);
} catch (IOException ex) {
ex.printStackTrace();
}
}
App
是组成加载属性文件的方法的类。这种方式使用getResourceAsStream()
的{{1}}方法。此方法采用要加载的文件(或资源)的路径。此方法将所有路径视为绝对路径。也就是说,如果仅提供文件名,它将在项目文件夹(例如conf,src)中搜索文件。
请注意,为此方法提供的路径不应以“ /”开头,因为该路径被视为隐式绝对路径。