Java中獲取properties資原始檔的幾種方法
一、基於InputStream
dbinfo.properties:
drivername=com.mysql.jdbc.Driver
url=jdbc\:mysql\://localhost\:3306/zskj1
user=root
password=123456
Properties pp=new Properties();//建立資源物件 FileInputStream fis=new FileInputStream("dbinfo.properties");//建立資原始檔輸入流 pp.load(fis);//將輸入流載入進資源物件 url=pp.getProperty("url");//獲取資源物件中的值 user=pp.getProperty("user"); drivername=pp.getProperty("drivername"); password=pp.getProperty("password");
這種方式從tomcat根目錄下開始讀取
二、基於ClassLoader
Properties properties = new Properties(); // 使用ClassLoader載入properties配置檔案生成對應的輸入流 InputStream in = PropertiesMain.class.getClassLoader().getResourceAsStream("config/jdbc.properties"); // 使用properties物件載入輸入流 properties.load(in); //獲取key對應的value值 properties.getProperty(String key);
這種方式從javaweb專案的src目錄下開始讀取
三、基於ResourceBundle(以下內容為轉載)
假設我們用來讀取配置檔案的class叫TestResourceBundle,配置項的值來自一個叫property_en.properties的檔案(該檔案應該放到TestResourceBundle所對應的CLASSPATH的目錄),有兩個值需要配置:name和value。首先,需要在該class中定義一些字串常量,如下:
public static final String PROPERTIES_FILE_NAME = "property";
public static final String MY_NAME_KEY = "name";
public static final String MY_VALUE_KEY = "value";
其中PROPERTIES_FILE_NAME指出了檔案的名字。實際讀取的檔案應該是property_en.properties,但是隻需要告訴ResourceBundle檔名是"property"就足夠了。下劃線和後面的"en"表示的是本地化資訊。這裡的en代表"ENGLISH",字尾properties是預設的。MY_NAME_KEY和MY_VALUE_KEY表示配置項在配置檔案中的名字,用ResourceBundle的getString方法根據這些名字去讀取相應的值。
然後,定義需要配置的變數。這些變數應該是靜態的:
private static String myName;
private static String myValue;
然後進行靜態初始化:
static {
try {
ResourceBundle bundle = ResourceBundle
.getBundle(PROPERTIES_FILE_NAME, Locale.ENGLISH);
myName = bundle.getString(MY_NAME_KEY).trim();
myValue = bundle.getString(MY_VALUE_KEY).trim();
}
catch(Exception ex) {
System.err.println( "[Property]:Can't Load property.properties");
myName = "default name";
myValue = "default value";
System.out.println( "myName will use the default value: " + myName);
System.out.println( "myValue will use the default value: " + myValue);
}
}
ResourceBundle bundle = ResourceBundle
.getBundle(PROPERTIES_FILE_NAME, Locale.ENGLISH);
這行程式碼初始化了一個ResourceBundle,Locale.ENGLISH用於指明本地化情況,因此會從"property_en.properties"中去讀取配置項。如果是Locale.CHINA,則會從property_zh.properties中讀取。這種機制使得程式的本地化變得簡單。
myName = bundle.getString(MY_NAME_KEY).trim();
這行程式碼讀入配置檔案中名為"name"的變數的值,並賦給靜態變數myName。
此外這段程式碼還包含了例外處理,當讀取失敗的時候,配置項會使用預設值。
這樣,該類就通過ResourceBundle讀取外存上的配置檔案對資料進行了配置。
property_en.properties檔案的內容如下
# properties sample
#
name=sega
value=100
其中以'#'開頭的行為註釋,ResourceBundle在遇到這些行的時候會忽略掉。