讀取properties配置文件中文亂碼

最近做一個小工具,需要利用配置文件讀取正則表達式,關於配置文件讀取中文亂碼的問題也不是第一次遇到了,,今兒終於對這個問題有了一個解決的辦法

總結:

喜歡把總結寫在前面,可以直接使用

  • 開發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)))));

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章