在日常開發過程中,我們經常需要拼接一些字元串之類的東西,而這些字元串往往是不變的,或者在java代碼中多次使用到的。當然我們可以在java代碼中寫死,但是這樣做的缺點也是有目共睹的,一旦業務需求發生變化,去修改内容的時候就得頻繁的去改java代碼。那我們可不可以換一種方式呢,答案是肯定的,我們可以将這些常量配置到配置檔案中去,然後需要這些常量的地方直接去配置檔案中讀取就行了,以後業務需求改變直接更改配置檔案就行了。
我們舉個案例來說明如何在java代碼中讀取配置檔案中的内容,我們使用到了Java.util.Properties;
- 建立一個配置檔案:student.properties,我們将此配置檔案放在config檔案夾下。
##學生資訊配置檔案
student.address.info = {0}的家庭位址為:{1},距離學校{2}公裡。
student.grades.info = 國文成績:{0},數學成績:{1},英語成績:{2}。
student.hobby.info = 喜歡{0}與{1},不喜歡{2}。
觀察上面的配置檔案,最上面一行為注釋内容,不會對配置檔案産生影響,下面三行為我們需要用到的字元串模闆,那代碼中的{0},{1},{2}..又代表什麼意思呢?其實這裡的{0},{1},{2}代表着通配占位符。舉個例子,我們在java代碼中讀取了第二行的那個條字元串模闆,我們再給這個模闆一個字元串數組,假如:{“小花”,“東方小區”,“10”},輸出這條語句的結果就是:小花的家庭位址為東方小區,距離學校10公裡。系統會根據數組的索引順序将字元串進行填充。
2.建立一個測試類,PropertiesTest.java
package com.zhexinit.odo.mail;
import org.springframework.core.io.ClassPathResource;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.MessageFormat;
import java.util.Properties;
public class PropertiesTest {
//讀取配置檔案
public static Properties prop = null;
public static void main(String args[]){
if(prop == null){
prop = new Properties();
try {
ClassPathResource classPathResource = new ClassPathResource("config/studentInfo.properties"); //這裡的填寫的參數是配置檔案的相對路徑
prop.load(new InputStreamReader(classPathResource.getInputStream(),"gbk")); //檔案流的編碼方式
}catch (IOException e){
e.printStackTrace();
}
}
String[] addressInfo = {"小明","東方小區","5.35"};
String[] gradesInfo = {"88","92.5","97"};
String[] hobbyInfo = {"跳遠","跑步","散步"};
System.out.println("位址資訊:" + MessageFormat.format(prop.getProperty("student.address.info"),addressInfo));
System.out.println("成績資訊:" + MessageFormat.format(prop.getProperty("student.grades.info"),gradesInfo));
System.out.println("愛好資訊:" + MessageFormat.format(prop.getProperty("student.hobby.info"),hobbyInfo));
}
}
重要的注釋我已經貼在代碼上了,大家可以了解一下。
測試輸出結果如下:
強調:數組中元素的索引位置與配置檔案中模闆需要替換的文本的索引位置是一一對應的。
但是你可能會問一個問題,這種配置檔案中的值都是常量,都是固定不變的,那如果配置檔案中的value是個變量,那怎麼取到這個變量呢?
例如,有這樣一條KEY-VALUE的值:spring.profile=${profile},我們如何取到${profile}的值呢?
親自實踐的值,getProperty隻能取到VALUE為常量的值,而變量的值是無法取到的,最終的列印調試結果也是字元串“${profile}”
像以上這種VALUE是變量的,我們一般都需要配置啟動參數的,那這個啟動參數我們可以通過System.getProperty("profile")擷取。
啟動參數的配置如下圖:
記得字首加個:-D
這樣,擷取變量VALUE值我們就可以通過System.getProperty("profile")取到了,列印一下。結果為:dev
關于變量的取值參考這篇文章:
http://www.cnblogs.com/yangmingke/p/6058898.html
至此,java讀取配置檔案的教程就結束啦,很簡單,常量或者需要替換的模闆寫在配置檔案中而不是在代碼中寫死,這也是種良好的編碼習慣。