Properties類的使用,工具類PropertiesUtil
配置文件中的內容我們配置好后直接獲取其中的一些關鍵的屬性到程序中來使用怎么操作呢?Java的工具包里面給我們提供了java.util.properties類。
背景:我們在實際業務中往往需要進行很多的配置,但是后期維護的時候在程序中直接去修改相關的配置很麻煩,所以需要將這些配置信息抽離出來,往往我們會寫很多的.properties配置文件,Properties(Java.util.Properties)就是專門面向讀取配置文件的信息的,這樣可以方便我們維護並且修改相關的配置信息。往往我們在代碼中會單獨創建一個PropertiesUtil工具類來使用Properties。
PropertiesUtil類:
1 import org.apache.commons.lang3.StringUtils; 2 import org.slf4j.Logger; 3 import org.slf4j.LoggerFactory; 4 5 import java.io.IOException; 6 import java.io.InputStreamReader; 7 import java.util.Properties; 8 9 public class PropertiesUtil { 10 private static Logger logger = LoggerFactory.getLogger(PropertiesUtil.class); 11 12 private static Properties properties; 13 14 static{ 15 String fileName = "FTPConfig.properties"; 16 properties = new Properties(); 17 try{ 18 properties.load(new InputStreamReader(PropertiesUtil.class.getClassLoader()
.getResourceAsStream(fileName),"UTF-8")); 19 }catch (IOException e){ 20 logger.error("配置文件讀取異常", e); 21 } 22 } 23 24 public static String getProperty(String key){ 25 String value = properties.getProperty(key.trim()); 26 if(StringUtils.isBlank(value)){ 27 return null; 28 } 29 return value.trim(); 30 } 31 32 public static String getProperty(String key,String defaultValue){ 33 34 String value = properties.getProperty(key.trim()); 35 if(StringUtils.isBlank(value)){ 36 value = defaultValue; 37 } 38 return value.trim(); 39 } 40 }
(1)寫讀取配置文件的static靜態代碼塊
我們在其中會寫一個static靜態代碼塊,用於在類加載的時候就將里面的信息加載到虛擬機里面。
String FileName里面放我們想要讀取的配置文件的名字。同時創建一個Properties對象,調用它的load()方法。
public synchronized void load(Reader reader) throws IOException { load0(new LineReader(reader)); }
在這個方法里面要傳入一個字符對象,這樣我們就以流的方式讀取配置文件中的信息,並且把它傳進這個Reader對象里面。
PropertiesUtil.class.getClassLoader()
上面的這一步會獲取一個PropertiesUtil類的ClassLoader對象:
1 public ClassLoader getClassLoader() { 2 ClassLoader cl = getClassLoader0(); 3 if (cl == null) 4 return null; 5 SecurityManager sm = System.getSecurityManager(); 6 if (sm != null) { 7 ClassLoader.checkClassLoaderPermission(cl, Reflection.getCallerClass()); 8 } 9 return cl; 10 }
同時調用ClassLoader里面的getResourceAsStream()方法,它通過讀取文件的名字將文件的信息以流的形式返回。
1 public InputStream getResourceAsStream(String name) { 2 URL url = getResource(name); 3 try { 4 return url != null ? url.openStream() : null; 5 } catch (IOException e) { 6 return null; 7 } 8 }
同時我們設置字符編碼的格式charsetName:"UTF-8"。
(2)寫兩個獲取屬性的方法
寫兩個獲取配置文件中指定屬性值的方法,一個帶有默認值一個不帶。
String value = properties.getProperty(key.trim());
調用peoperties方法的getProperty()方法:以指定字符串的形式返回。
1 public String getProperty(String key) { 2 Object oval = super.get(key); 3 String sval = (oval instanceof String) ? (String)oval : null; 4 return ((sval == null) && (defaults != nul