欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java讀寫.properties文件解決中文亂碼問(wèn)題

 更新時(shí)間:2017年11月21日 10:43:38   作者:李學(xué)凱  
這篇文章主要介紹了Java讀寫.properties文件解決中文亂碼問(wèn)題,非常具有實(shí)用價(jià)值,需要的朋友可以參考下

一般使用到properties配置文件,一般都是在spring項(xiàng)目里面,直接由框架幫你讀,當(dāng)然,你也得考慮到編碼的問(wèn)題。

但是現(xiàn)在要是要求使用Java直接讀寫properties文件,就發(fā)現(xiàn)很多的問(wèn)題,比如,我的properties文件的編碼竟然不是utf-8的。或者說(shuō)我壓根就沒(méi)考慮到這個(gè)問(wèn)題。

再比如,當(dāng)properties文件里面有漢子的時(shí)候,發(fā)現(xiàn)讀寫的漢字亂碼了,在我這是因?yàn)槲业碾娔X默認(rèn)編碼是gbk,但是讀的時(shí)候,又沒(méi)有設(shè)置編碼,搞出的問(wèn)題。

下面直接上代碼,看問(wèn)題。

package com.lxk.propertyFileTest; 
 
import java.io.*; 
import java.util.Properties; 
 
/** 
 * 讀寫properties文件測(cè)試 
 * <p> 
 * Created by lxk on 2017/4/25 
 */ 
public class Main { 
  public static void main(String[] args) { 
    Properties prop = new Properties(); 
    InputStream in = null; 
    FileOutputStream oFile = null; 
    try { 
      in = new BufferedInputStream(new FileInputStream("D:config.properties")); 
      //prop.load(in);//直接這么寫,如果properties文件中有漢子,則漢字會(huì)亂碼。因?yàn)槲丛O(shè)置編碼格式。 
      prop.load(new InputStreamReader(in, "utf-8")); 
      for (String key : prop.stringPropertyNames()) { 
        System.out.println(key + ":" + prop.getProperty(key)); 
      } 
      //保存屬性到b.properties文件 
      oFile = new FileOutputStream("b.properties", false);//true表示追加打開,false每次都是清空再重寫 
 
      prop.setProperty("phone", "10086"); 
      //prop.store(oFile, "此參數(shù)是保存生成properties文件中第一行的注釋說(shuō)明文字");//這個(gè)會(huì)兩個(gè)地方亂碼 
      //prop.store(new OutputStreamWriter(oFile, "utf-8"), "漢字亂碼");//這個(gè)就是生成的properties文件中第一行的注釋文字亂碼 
      prop.store(new OutputStreamWriter(oFile, "utf-8"), "lll"); 
    } catch (Exception e) { 
      System.out.println(e.getMessage()); 
    } finally { 
      if (in != null) { 
        try { 
          in.close(); 
        } catch (IOException e) { 
          System.out.println(e.getMessage()); 
        } 
      } 
      if (oFile != null) { 
        try { 
          oFile.close(); 
        } catch (IOException e) { 
          System.out.println(e.getMessage()); 
        } 
      } 
    } 
  } 
} 

運(yùn)行結(jié)果:這個(gè)只是讀出來(lái)的內(nèi)容的結(jié)果。

下面是寫出來(lái)的文件內(nèi)容。

額,這個(gè)圖,有點(diǎn)亂。但是,卻把三種運(yùn)行情況,全部給展示出來(lái)了。很清晰。

最后,代碼里面也看到了怎么把字節(jié)流變成帶編碼格式的字符流,這個(gè)可以注意下,我也留個(gè)筆記。

對(duì)上面的代碼的更新,算是結(jié)構(gòu)調(diào)整,功能分開。瞬間代碼看著就清晰明了啦。

所以,一般上面的代碼是不推薦實(shí)用的。個(gè)中妙用,自行體會(huì)吧。

package com.lxk.propertyFileTest; 
 
import java.io.*; 
import java.util.Properties; 
 
/** 
 * 讀寫properties文件測(cè)試 
 * <p> 
 * Created by lxk on 2017/4/25 
 */ 
public class Main { 
  public static void main(String[] args) { 
    Properties prop = readPropertiesFile(); 
    writePropertiesFile(prop); 
  } 
 
  /** 
   * 讀Properties文件 
   */ 
  private static Properties readPropertiesFile() { 
    Properties prop = new Properties(); 
    InputStream in = null; 
    try { 
      in = new BufferedInputStream(new FileInputStream("D:config.properties")); 
      //prop.load(in);//直接這么寫,如果properties文件中有漢子,則漢字會(huì)亂碼。因?yàn)槲丛O(shè)置編碼格式。 
      prop.load(new InputStreamReader(in, "utf-8")); 
      for (String key : prop.stringPropertyNames()) { 
        System.out.println(key + ":" + prop.getProperty(key)); 
      } 
    } catch (Exception e) { 
      System.out.println(e.getMessage()); 
    } finally { 
      if (in != null) { 
        try { 
          in.close(); 
        } catch (IOException e) { 
          System.out.println(e.getMessage()); 
        } 
      } 
    } 
    return prop; 
  } 
 
  /** 
   * 寫Properties文件 
   */ 
  private static void writePropertiesFile(Properties prop) { 
    prop.setProperty("phone", "10086"); 
    FileOutputStream oFile = null; 
    try { 
      //保存屬性到b.properties文件 
      oFile = new FileOutputStream("b.properties", false);//true表示追加打開,false每次都是清空再重寫 
      //prop.store(oFile, "此參數(shù)是保存生成properties文件中第一行的注釋說(shuō)明文字");//這個(gè)會(huì)兩個(gè)地方亂碼 
      //prop.store(new OutputStreamWriter(oFile, "utf-8"), "漢字亂碼");//這個(gè)就是生成的properties文件中第一行的注釋文字亂碼 
      prop.store(new OutputStreamWriter(oFile, "utf-8"), "lll"); 
    } catch (Exception e) { 
      System.out.println(e.getMessage()); 
    } finally { 
      if (oFile != null) { 
        try { 
          oFile.close(); 
        } catch (IOException e) { 
          System.out.println(e.getMessage()); 
        } 
      } 
    } 
  } 
 
} 

注意:這個(gè)是我后來(lái)發(fā)現(xiàn)的,不知道在看的各位有沒(méi)有這個(gè)問(wèn)題。

我發(fā)現(xiàn)寫出來(lái)的properties文件的編碼格式并不是簡(jiǎn)單的utf-8,而是utf-8無(wú)bom格式。證據(jù)可參見下圖:

這個(gè)打開工具叫 Notepad++ 估計(jì)在看的各位的電腦上都有這個(gè)吧。

但是你要是把這個(gè)文件的編碼格式給修改成utf-8編碼之后,運(yùn)行的結(jié)果,就有一丟丟不一樣。

繼續(xù)參見下圖:

看到多了一個(gè)小杠“”-“”,具體怎么解釋,我暫時(shí)還不清楚。

這個(gè)時(shí)候,寫出來(lái)的文件的,也同樣出現(xiàn)了這個(gè)問(wèn)題,具體還是繼續(xù)參見下圖:

所以,這個(gè)我暫時(shí)解釋不了。
慚愧。。。。
還有個(gè)問(wèn)題就是:讀出來(lái)的屬性,是不按原來(lái)文件中的順序展示的,當(dāng)然寫的時(shí)候,也是亂序的。
這還是個(gè)問(wèn)題,還有待解決。什么時(shí)候解決了,再在此處留個(gè)鏈接。

鏈接:Java代碼實(shí)現(xiàn)對(duì)properties文件有序的讀寫

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 一文詳解Java中的Stream的匯總和分組操作

    一文詳解Java中的Stream的匯總和分組操作

    這篇文章主要為大家詳細(xì)介紹了Java8中的Stream的匯總和分組的操作,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Java有一定幫助,需要的可以參考一下
    2022-09-09
  • mybatis項(xiàng)目CRUD步驟實(shí)例詳解

    mybatis項(xiàng)目CRUD步驟實(shí)例詳解

    這篇文章主要介紹了mybatis項(xiàng)目CRUD步驟,包括pom.xml引入相應(yīng)的依賴,在resources目錄下寫配置文件,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • SpringBoot開發(fā)之?dāng)r截器實(shí)例

    SpringBoot開發(fā)之?dāng)r截器實(shí)例

    這篇文章主要介紹了SpringBoot開發(fā)之?dāng)r截器實(shí)例,Spring?Boot簡(jiǎn)介Spring?Boot發(fā)展史SpringBoot的魅力SpringBoot的優(yōu)點(diǎn)總結(jié)Spring?Boot是一個(gè)基于Spring框架的快速開發(fā)腳手架,它簡(jiǎn)化了Spring應(yīng)用的初始化和搭建過(guò)程,需要的朋友可以參考下
    2023-09-09
  • java實(shí)現(xiàn)根據(jù)ip地址獲取地理位置的代碼分享

    java實(shí)現(xiàn)根據(jù)ip地址獲取地理位置的代碼分享

    這篇文章主要介紹了java實(shí)現(xiàn)根據(jù)ip地址獲取地理位置的代碼分享,本文中使用的是QQ在線接口,也可以使用新浪、淘寶等提供的在線接口,需要的朋友可以參考下
    2014-08-08
  • Java實(shí)現(xiàn)PDF轉(zhuǎn)為Word文檔的示例代碼

    Java實(shí)現(xiàn)PDF轉(zhuǎn)為Word文檔的示例代碼

    眾所周知,PDF文檔除了具有較強(qiáng)穩(wěn)定性和兼容性外,?還具有較強(qiáng)的安全性,在工作中可以有效避免別人無(wú)意中對(duì)文檔內(nèi)容進(jìn)行修改。本文將分為以下兩部分介紹如何在保持布局的情況下將PDF轉(zhuǎn)為Word文檔,希望對(duì)大家有所幫助
    2023-01-01
  • Spring Integration Redis 使用示例詳解

    Spring Integration Redis 使用示例詳解

    本文給大家介紹Spring Integration Redis的配置與使用,涵蓋依賴添加、Redis連接設(shè)置、分布式鎖實(shí)現(xiàn)、消息通道配置及最佳實(shí)踐,包括版本兼容性、連接池優(yōu)化、序列化和常見問(wèn)題解決方案,指導(dǎo)高效集成與應(yīng)用,感興趣的朋友跟隨小編一起看看吧
    2025-08-08
  • java實(shí)現(xiàn)時(shí)間控制的幾種方案

    java實(shí)現(xiàn)時(shí)間控制的幾種方案

    這篇文章主要介紹了java實(shí)現(xiàn)時(shí)間控制的幾種方案,本文從多個(gè)方面給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Mybatis-plus配置之日期時(shí)間自動(dòng)填充實(shí)踐

    Mybatis-plus配置之日期時(shí)間自動(dòng)填充實(shí)踐

    本文介紹如何使用MyBatis-Plus的MetaObjectHandler接口實(shí)現(xiàn)新增和更新時(shí)間的自動(dòng)填充,通過(guò)繼承抽象類、添加注解及處理版本兼容性,簡(jiǎn)化開發(fā)流程并減少手動(dòng)操作
    2025-08-08
  • 永久解決idea git log亂碼的問(wèn)題

    永久解決idea git log亂碼的問(wèn)題

    這篇文章主要介紹了永久解決idea git log亂碼的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • Java貪心算法超詳細(xì)講解

    Java貪心算法超詳細(xì)講解

    人之初性本善,但是隨著自身的經(jīng)歷、生活環(huán)境等因素的影響,人逐漸會(huì)生出貪嗔癡。實(shí)際上不光人有貪念,我們的算法也會(huì)有貪念,今天就和大家介紹下一個(gè)有貪念的算法模型---貪心算法,看看一個(gè)算法是怎么產(chǎn)生貪念的
    2022-05-05

最新評(píng)論