1. 程式人生 > >Java中獲取properties資原始檔的幾種方法

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在遇到這些行的時候會忽略掉。