注意:如果我的英文错误,请原谅我。
我正在学习java!现在我尝试将文件中的属性加载到java.util.Properties对象...
但我得到了一个例外。我按filename
获取getClass().getResource("path/to/resource").toFile()
并从中创建一个File对象;然后阅读内容。但是当我将InputStream
文件发送到“加载”方法时,请获取NullPointerException
。
这是我的代码:
final class Main
{
protected Properties config;
protected Properties getConfig()
{
if( this.config == null )
{
String filename = this.getClass().getResource("/tiny.properties").getFile();
System.out.print( filename+ "\n" );
File f = new File( filename );
try(InputStream propsFile = new FileInputStream( f ) )
{
int ch = 0;
while( (ch = propsFile.read() ) != -1 )
{
System.out.print((char) ch); // I can get ALL content of File Here
}
this.config.load( propsFile ); // But here I got NullPointerException!
}
catch(IOException exc)
{
assert true : "Can't read properties file!";
}
}
return this.config;
}
}
和我的例外:
Exception in thread "main" java.lang.NullPointerException
at ir.teanlab.japp1.mavenproject1.Main.getConfig(Main.java:43) // this.config.load( ... )
at ir.teanlab.japp1.mavenproject1.Main.getSqlConnection(Main.java:57)
at ir.teanlab.japp1.mavenproject1.Main.<init>(Main.java:67)
at ir.teanlab.japp1.mavenproject1.App.main(App.java:15)
答案 0 :(得分:3)
您收到NullPointerException
,因为调用config
方法时load
仍为空。您需要像这样初始化config
对象:
config = new Properties();
可能最好把它放在你的空检查下面:
if( this.config == null )
{
config = new Properties();
....
答案 1 :(得分:1)
您刚刚在此行Properties config;
中创建了一个引用,但尚未创建对象
创建像Properties config=new Properties()
答案 2 :(得分:0)
尝试删除if条件(if(this.config == null))。 最终代码是:
final class Main
{
protected Properties config;
protected Properties getConfig()
{
this.config=new new Properties();
String filename =this.getClass().getResource("/tiny.properties").getFile();
System.out.print( filename+ "\n" );
File f = new File( filename );
try(InputStream propsFile = new FileInputStream( f ) )
{
int ch = 0;
while( (ch = propsFile.read() ) != -1 )
{
System.out.print((char) ch); // I can get ALL content of File Here
}
this.config.load( propsFile ); // But here I got NullPointerException!
}
catch(IOException exc)
{
assert true : "Can't read properties file!";
}
return this.config;
}
}
答案 3 :(得分:0)
问题是您的config
变量尚未初始化,因此仍为空。因此,在您的try / catch块中,您应该添加config = new Properties();
在旁注中,有一种更简单的方式来获取InputStream
。我们使用以下技术(Java 6):
InputStream inputStream = null;
Properties config = null;
try
{
config = new Properties();
inputStream = this.getClass().getClassLoader().getResourceAsStream("path + resource name");
if (inputStream != null)
{
config.load(inputStream);
}
else
{
throw new FileNotFoundException("property file '" + "path + resource name" + "' not found in the classpath");
}
}
catch (IOException e)
{
throw new RuntimeException(e);
}
finally
{
if (inputStream != null)
{
try
{
inputStream.close();
}
catch (IOException e)
{
throw new RuntimeException(e);
}
}
}
显然,使用java 7,您可以尝试使用资源。