java 如何讀取properties文件
1.情景展示

將要訪問的接口地址等常用的配置添加到properties文件中,比直接寫到j(luò)ava類中的好處在于:
當(dāng)我們需要修改相應(yīng)配置時,直接修改properties文件,重啟tomcat即可,避免了重新編譯引用該配置的java文件,同時,也便于項(xiàng)目的維護(hù)。
方式一
通過spring的工具類PropertiesLoaderUtils來實(shí)現(xiàn)對properties文件的解析
所需jar包:spring的核心jar包,spring-core-版本號.jar
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import org.springframework.core.io.support.PropertiesLoaderUtils;
/**
* 借助spring讀取Properties文件
* @explain Spring 提供的 PropertiesLoaderUtils
* 允許您直接通過基于類路徑的文件地址加載屬性資源 最大的好處就是:實(shí)時加載配置文件,修改后立即生效,不必重啟
* @author Marydon
* @creationTime 2018年5月23日上午9:58:59
* @version 1.0
* @since
* @email marydon20170307@163.com
*/
public class PropertiesUtils {
/**
* 讀取properties文件
* @param fileName properties文件名及所在路徑
* @explain 參數(shù)說明
* 1.傳遞的參數(shù)不是properties類型文件,不會報錯,返回的是空Map;
* 2.傳遞的參數(shù)是根本不存在的properties文件,也不會報錯,返回的是空Map;
* 3.傳遞的參數(shù)可以帶路徑,可以正常解析到
* @return
*/
public static Map<String, String> readProperties(String fileName) {
Map<String, String> resultMap = new HashMap<String, String>();
try {
Properties props = PropertiesLoaderUtils.loadAllProperties(fileName);
for (Object key : props.keySet()) {
resultMap.put(key.toString(), props.get(key).toString());
}
} catch (IOException e) {
e.printStackTrace();
}
return resultMap;
}
/**
* @param args
*/
public static void main(String[] args) {
// Map map = readProperties("base/web/imageInfo/fileRootDirectories.properties");
Map map = readProperties("fileRootDirectories.properties");
for (Object key : map.keySet()) {
System.out.println(key.toString() + "=" + map.get(key).toString());
}
// 打印結(jié)果
// fileRootPath=uploadFiles
}
}
這種方式的缺點(diǎn)在于:
每次調(diào)用都要重新解析對應(yīng)的properties文件,所以,我們可以在項(xiàng)目啟動的時候,就把該文件加載到內(nèi)存中(一次加載解析,永久使用)。
方式二
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
/**
* properties文件工具類
* @description
* 在該類被加載的時候,它就會自動讀取指定位置的配置文件內(nèi)容并保存到靜態(tài)屬性中,高效且方便,一次加載,可多次使用
* @author: Marydon
* @date: 2020年07月13日 0013 16:04
*/
public class PropertyUtils_old {
private static Logger logger = LoggerFactory.getLogger(PropertyUtils_old.class);
// 待解析的properties文件名稱
private static final String FILE_NAME = "bill.properties";
// 用于接收解析過properties文件
private static Properties props;
// 靜態(tài)代碼塊:在該類被加載到內(nèi)容中時,該代碼塊會執(zhí)行
static {
// 靜態(tài)代碼塊執(zhí)行時將要執(zhí)行的方法
loadPropertiesFile();
}
synchronized static private void loadPropertiesFile() {
logger.debug("開始加載properties文件內(nèi)容.......");
props = new Properties();
InputStream in = null;
try {
// 方式一:通過類加載器進(jìn)行獲取properties文件流(不用添加路徑)
in = PropertyUtils_old.class.getClassLoader().getResourceAsStream(FILE_NAME);
// 方式二:通過類進(jìn)行獲取properties文件流(需要加/)
// in = PropertyUtils.class.getResourceAsStream("/bill.properties");
props.load(in);
} catch (NullPointerException e) {
logger.error("bill.properties文件未找到!");
} catch (IOException e) {
logger.error("出現(xiàn)IOException!");
} finally {
try {
if (null != in) {
in.close();
}
} catch (IOException e) {
logger.error("bill.properties文件流關(guān)閉出現(xiàn)異常");
}
}
logger.info("加載properties文件內(nèi)容完成...........");
logger.info("properties文件內(nèi)容:" + props);
}
/*
* 獲取properties文件中指定key的value
* @date: 2020年07月13日 0013 16:17
* @param: key
* @return: java.lang.String
*/
public static String getProperty(String key) {
if (null == props) {
loadPropertiesFile();
}
return props.getProperty(key);
}
/*
* 獲取properties文件中指定key的value
* @date: 2020年07月13日 0013 16:17
* @param: key
* @param: defaultValue
* @return: java.lang.String
*/
public static String getProperty(String key, String defaultValue) {
if (null == props) {
loadPropertiesFile();
}
return props.getProperty(key, defaultValue);
}
}
測試
public static void main(String[] args) {
System.out.println(getProperty("bill.czInterfaceAddress"));
}

方式一也可以按照方式二的形式,來達(dá)到一次加載,永久使用的效果。
以上就是java 如何讀取properties文件的詳細(xì)內(nèi)容,更多關(guān)于java 讀取properties文件的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
SpringMVC4.3?HttpMessageConverter接口實(shí)現(xiàn)源碼分析
這篇文章主要為大家介紹了SpringMVC4.3?HttpMessageConverter接口實(shí)現(xiàn)源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09
SpringBoot?Security從入門到實(shí)戰(zhàn)示例教程
Spring?Security是一個功能強(qiáng)大且高度可定制的身份驗(yàn)證和訪問控制框架,接下來通過本文給大家介紹SpringBoot?Security從入門到實(shí)戰(zhàn)示例教程,感興趣的朋友一起看看吧2022-05-05
Okhttp在SpringBoot中的應(yīng)用實(shí)戰(zhàn)記錄(太強(qiáng)了)
這篇文章主要給大家介紹了關(guān)于Okhttp在SpringBoot中應(yīng)用實(shí)戰(zhàn)的相關(guān)資料,在Spring Boot中使用OkHttp主要是為了發(fā)送HTTP請求和處理響應(yīng),OkHttp是一個高效、易用的HTTP客戶端庫,它具有簡潔的API和強(qiáng)大的功能,需要的朋友可以參考下2023-12-12
Springboot 使用 maven-resources-plugin 打包變量替換ja
這篇文章主要介紹了Springboot 使用 maven-resources-plugin 打包變量替換jar沒有打包進(jìn)去、Jar包沒有被使用的解決方法,本文給大家介紹的非常詳細(xì),感興趣的朋友一起看看吧2024-08-08

