目前我正在尝试从项目目录的根目录中读取我的配置文件,为了进行这种实际配置,我想将其移动到外部位置然后从那里读取。
在以下代码中添加完整路径会引发错误:
package CopyEJ;
import java.util.Properties;
public class Config
{
Properties configFile;
public Config()
{
configFile = new java.util.Properties();
try {
// configFile.load(this.getClass().getClassLoader().getResourceAsStream("CopyEJ/config.properties"));
Error Statement ** configFile.load(this.getClass().getClassLoader().getResourceAsStream("C://EJ_Service//config.properties"));
}catch(Exception eta){
eta.printStackTrace();
}
}
public String getProperty(String key)
{
String value = this.configFile.getProperty(key);
return value;
}
}
这是错误:
java.lang.NullPointerException
at java.util.Properties$LineReader.readLine(Properties.java:365)
at java.util.Properties.load(Properties.java:293)
at CopyEJ.Config.<init>(Config.java:13)
at CopyEJ.CopyEJ.main(CopyEJ.java:22)
Exception in thread "main" java.lang.NullPointerException
at java.io.File.<init>(File.java:194)
at CopyEJ.CopyEJ.main(CopyEJ.java:48)
我该如何解决这个问题?
答案 0 :(得分:6)
方法getResourceAsStream
的目的是在某个文件上打开流,该文件存在于里面你的jar中。如果您知道特定文件的确切位置,只需打开新的FileInputStream
。
即。您的代码应如下所示:
try (FileInputStream fis = new FileInputStream("C://EJ_Service//config.properties")) {
configFile.load(fis);
} catch(Exception eta){
eta.printStackTrace();
}
答案 1 :(得分:3)
此行要求您的config.properties
位于java CLASSPATH
this.getClass().getClassLoader().getResourceAsStream("C://EJ_Service//config.properties")
如果不是,则无法访问config.properties。
您可以尝试其他替代方法并使用configFile.load()
函数进行读取。
一个例子是:
InputStream inputStream = new FileInputStream(new File("C:/EJ_Service/config.properties"));
configFile.load(inputStream);