最近做一個小工具,需要利用配置文件讀取正則表達式,關於配置文件讀取中文亂碼的問題也不是第一次遇到了,,今兒終於對這個問題有了一個解決的辦法
總結:
喜歡把總結寫在前面,可以直接使用
- 開發java項目時的配置文件:配置文件位於src同級目錄(即:將項目打包爲jar包後,配置文件與jar包應放於同一文件夾中)
//配置文件編碼utf-8
//讀取配置文件中文字符不需要重新編碼
Properties properties=new Properties();
String propStr=System.getProperty("user.dir")+"\\office.properties";
InputStream url=new FileInputStream(propStr);
properties.load(new InputStreamReader(url));
//寫入配置文件需要轉碼
properties.store(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(propStr)))), "utf-8");
-
開發Java web項目時的配置文件:配置文件位於src目錄下
//配置文件編碼utf-8
//讀取配置文件中文需要重新編碼
Properties properties = new Properties();
InputStreamReader inStream=new InputStreamReader(BaseDao.class.getClassLoader().getResourceAsStream("dao.properties"),"utf-8");
properties.load(inStream);//BaseDao爲當前類
一、加載路徑以及亂碼問題
一般配置文件放在項目結構的src目錄下,在eclipse開發環境開發Java web項目加載該配置文件的方法爲:
Properties properties=new Properties();
//加載配置文件
InputStream url=Util.class.getClassLoader().getResourceAsStream("office.properties");
properties.load(new InputStreamReader(url));
有時候這樣的問題在於讀取中文字符時會亂碼(特別是在開發java項目的時候)
雖然在往配置文件中添加數據之前,已經將配置文件編碼屬性修改爲utf-8,但是任不可避免的會產生亂碼問題。這是由於配置文件的加載默認是以ISO-8859-1編碼進行,所以在讀取其數據時要進行轉碼
String value=new String(properties.getProperty(key).getBytes("ISO-8859-1"),"utf-8");
但是將配置文件方於src目錄下的方式只適合於java web開發,在jar程序開發中不能用,因爲jar程序中的配置文件一般都是放於程序外部,讓使用者可以修改相關配置。將配置文件置於src目錄下會導致jar可執行程序在eclipse中加載成功,但在windows環境中加載失敗。
將配置文件放於項目之下與src同級目錄,在eclipse開發環境中加載該配置文件的方法爲:
Properties properties=new Properties();
//獲得配置文件目錄
String propStr=System.getProperty("user.dir")+"\\*.properties";
InputStream url=new FileInputStream(propStr);
properties.load(new InputStreamReader(url));
對於properties.load()網上有的說法爲:
properties.load(new InputStreamReader(url.getBytes("ISO-8859-1"),"utf-8"));
- 第一種load(沒有進行轉碼)的做法前提是配置文件屬性已經被設置爲utf-8
- 第二種load(進行了轉碼)的做法前提是配置文件沒有進行過屬性修改(即默認編碼爲ISO-8859-1)
- 且兩種做法不能互換,設置了編碼爲utf-8就不能使用第二種方式,默認ISO-8859-1的情況下就不能直接使用第一種方式
在進行jar可運行程序開發中,如果將配置文件放於與src同級目錄,即:
導出項目後:
這種情況下對配置文件的讀取和寫入操作:
第一種:
//配置文件編碼utf-8
//讀取配置文件不需要轉碼
Properties properties=new Properties();
String propStr=System.getProperty("user.dir")+"\\office.properties";
InputStream url=new FileInputStream(propStr);
properties.load(new InputStreamReader(url));
//寫入配置文件需要轉碼
properties.store(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(propStr)))), "utf-8");
第二種:
//配置文件編碼ISO-8859-1
//讀取配置文件需要轉碼
Properties properties=new Properties();
String propStr=System.getProperty("user.dir")+"\\office.properties";
InputStream url=new FileInputStream(propStr);
properties.load(new InputStreamReader(url.getBytes("ISO-8859-1"),"utf-8"));
//寫入配置文件不需要轉碼
properties.store(new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(propStr)))));