借鑒:http://blog.csdn.net/sleepdancer/article/details/9207425
static { InputStream in = XXX.class.getResourceAsStream("/conf/abc.properties"); try { prop.load(in); } catch (IOException e) { e.printStackTrace(); } }
不能初始化,也就是類在new的時候出現了問題,於是仔細檢查了一下不能初始化的類,發現是個靜態工具類,根本就沒有什么構造函數,那么沒有構造函數何來的初始化異常?於是仔細的檢查了一下代碼之后,發現異常可能出現在這個地方了。
關鍵就在第一行的 InputStream in = XXX.class.getResourceAsStream("/conf/abc.properties");,如果沒有abc.properties的話,肯定會出現異常,這樣的話就會造成了初始化錯誤。當然比較奇怪的時候,既然try了,為什么不把第一行的代碼也放到try里面,這樣的話,即使有錯誤,也會能夠順利的進行初始化操作。
后來博主應該發現是properties文件未能找到,那么Java web里面如何找到也是個問題,下面是解決辦法,用classLoader來解決:
//private static FileInputStreamfis=null;
private static InputStream is=null;
pp=new Properties();
try {
//此句會找不到,有java.io.FileNotFoundException:
//fis=newFileInputStream("XXX.properties"); // 一般情況下默認讀取為tomcat目錄
//當我們使用java web的時候,讀取文件要使用類加載器[因為類加載器去讀取資源的時候,默認的主目錄是src]
is=SQLHelper.class.getClassLoader().getResourceAsStream("com/demo/util/XXX.properties");
pp.load(is);
dbDriver=pp.getProperty("dbDriver");
url=pp.getProperty("url");
username=pp.getProperty("username");
password=pp.getProperty("password");
} catch (IOException e) { e.printStackTrace(); }
注意:在Linux下用部分編輯器編輯文件有可能造成Java程序解析出錯。如在web控制台項目中,一次在param.properties文件中添加一條記錄,但由於使用記事本編輯器,造成加載工具類時報錯不能初始化。
