Properties类的使用,读取properties文件中的属性
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