Java web專案中讀取properties,xml檔案
一般專案配置檔案都會在系統啟動的時候進行載入(static塊中):
反射方式獲取properties
public class WeixinUtil {
// 成員變數
private static String testParam;
private static List<Object> list_row = new ArrayList<Object>();
// Properties
static {
Properties prop = new Properties();
// 通過Object.class獲取資源路徑 path
// 不以’/'開頭時預設是從此類所在的包下取資源,以’/'開頭則是從ClassPath根下獲取。其只是通過path構造一個絕對路徑,最終還是由ClassLoader獲取資源。
InputStream in = Object.class.getResourceAsStream("/cas.properties");
try {
prop.load(in);
// 獲取value
testParam = prop.getProperty("filePath");
} catch (Exception e) {
e.printStackTrace();
}
}
// xml
static {
InputStream in = WeixinUtil.class.getResourceAsStream("/cityCode.xml");
SAXReader sr = new SAXReader();// 獲取讀取方式
Document doc;
try {
doc = sr.read(in);
// 讀取xml檔案,並且將資料全部存放到Document中
Element root = doc.getRootElement();// 獲取根節點
List xmlList = root.elements("province");// 根據根節點,將根節點下
// row中的所有資料放到list容器中。
for (Object obj : xmlList) {
Element row = (Element) obj;
list_row = row.elements("county");// 獲取county節點下所有的內容,存入list_row容器中
}
} catch (DocumentException e) {
e.printStackTrace();
}
}
public static void main(String[] arg0) {
System.out.println(testParam);
}
}
ps:Java中的getResourceAsStream有以下幾種:
1. Class.getResourceAsStream(String path) : path 不以’/'開頭時預設是從此類所在的包下取資源,以’/'開頭則是從ClassPath根下獲取。其只是通過path構造一個絕對路徑,最終還是由ClassLoader獲取資源。
2. Class.getClassLoader.getResourceAsStream(String path)
:預設則是從ClassPath根下獲取,path不能以’/'開頭,最終是由ClassLoader獲取資源。
3. ServletContext. getResourceAsStream(String path):預設從WebAPP根目錄下取資源,Tomcat下path是否以’/'開頭無所謂,當然這和具體的容器實現有關。
4. Jsp下的application內建物件就是上面的ServletContext的一種實現。
另外,如果是static方法或塊中讀取Properties檔案,還有一種最保險的方法,就是這個類的本身名字來直接獲取Class物件,比如本例中可寫成WeixinUtil.class,這樣做是最保險的方法