Java读写.properties文件解决中文乱码问题

一般使用到properties配置文件,一般都是在spring项目里面,直接由框架帮你读,当然,你也得考虑到编码的问题。

但是现在要是要求使用Java直接读写properties文件,就发现很多的问题,比如,我的properties文件的编码竟然不是utf-8的。或者说我压根就没考虑到这个问题。

再比如,当properties文件里面有汉子的时候,发现读写的汉字乱码了,在我这是因为我的电脑默认编码是gbk,但是读的时候,又没有设置编码,搞出的问题。

下面直接上代码,看问题。

package com.lxk.propertyFileTest; 

import java.io.*;
import java.util.Properties; 

/**
 * 读写properties文件测试
 * <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文件中有汉子,则汉字会乱码。因为未设置编码格式。
      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, "此参数是保存生成properties文件中第一行的注释说明文字");//这个会两个地方乱码
      //prop.store(new OutputStreamWriter(oFile, "utf-8"), "汉字乱码");//这个就是生成的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());
        }
      }
    }
  }
}

运行结果:这个只是读出来的内容的结果。

下面是写出来的文件内容。

额,这个图,有点乱。但是,却把三种运行情况,全部给展示出来了。很清晰。

最后,代码里面也看到了怎么把字节流变成带编码格式的字符流,这个可以注意下,我也留个笔记。

对上面的代码的更新,算是结构调整,功能分开。瞬间代码看着就清晰明了啦。

所以,一般上面的代码是不推荐实用的。个中妙用,自行体会吧。

package com.lxk.propertyFileTest; 

import java.io.*;
import java.util.Properties; 

/**
 * 读写properties文件测试
 * <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文件中有汉子,则汉字会乱码。因为未设置编码格式。
      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, "此参数是保存生成properties文件中第一行的注释说明文字");//这个会两个地方乱码
      //prop.store(new OutputStreamWriter(oFile, "utf-8"), "汉字乱码");//这个就是生成的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());
        }
      }
    }
  } 

}

注意:这个是我后来发现的,不知道在看的各位有没有这个问题。

我发现写出来的properties文件的编码格式并不是简单的utf-8,而是utf-8无bom格式。证据可参见下图:

这个打开工具叫 Notepad++ 估计在看的各位的电脑上都有这个吧。

但是你要是把这个文件的编码格式给修改成utf-8编码之后,运行的结果,就有一丢丢不一样。

继续参见下图:

看到多了一个小杠“”-“”,具体怎么解释,我暂时还不清楚。

这个时候,写出来的文件的,也同样出现了这个问题,具体还是继续参见下图:

所以,这个我暂时解释不了。
惭愧。。。。
还有个问题就是:读出来的属性,是不按原来文件中的顺序展示的,当然写的时候,也是乱序的。
这还是个问题,还有待解决。什么时候解决了,再在此处留个链接。

链接:Java代码实现对properties文件有序的读写

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 详解Intellij IDEA中.properties文件中文显示乱码问题的解决

    首先,你可能会见到如下提示: File encoding is disabled because .properties file (see Settings|Editor|File Encodings|Properties Files) 具体如下图.没截全图,太大了,只截取了提示部分. 在这之前,我一直以为,我已经设置了我这个编辑器下的所有文件的编码格式都是utf-8,直到我这次要读取properties文件的时候,才惊讶的发现,我的properties文件并不都是utf-8的文件编码格式.然

  • Java读取properties配置文件时,出现中文乱码的解决方法

    如下所示: public static String getConfig(String key) { Properties pros = new Properties(); String value = ""; try { pros.load(new InputStreamReader(Object.class.getResourceAsStream("/properties.properties"), "UTF-8")); value = pr

  • Java读写.properties文件解决中文乱码问题

    一般使用到properties配置文件,一般都是在spring项目里面,直接由框架帮你读,当然,你也得考虑到编码的问题. 但是现在要是要求使用Java直接读写properties文件,就发现很多的问题,比如,我的properties文件的编码竟然不是utf-8的.或者说我压根就没考虑到这个问题. 再比如,当properties文件里面有汉子的时候,发现读写的汉字乱码了,在我这是因为我的电脑默认编码是gbk,但是读的时候,又没有设置编码,搞出的问题. 下面直接上代码,看问题. package co

  • Java Web项目中解决中文乱码方法总结(三种最新方法)

    目录 前言 问题背景 下面我说三种方法供大家参考 方法一: 方法二: 第三种方法: Tomcat结构与介绍 bin conf lib logs temp webapps work 前言 JavaEE(Java Enterprise Edition),Java企业版,是一个用于企业级web开发平台.最早由Sun公司定制并发布,后由Oracle负责维护.JavaEE平台规范了在开发企业级web应用中的技术标准.在JavaEE平台共包含了13个技术规范(随着JavaEE版本的变化所包含的技术点的数量会

  • PHP读取文件,解决中文乱码UTF-8的方法分析

    本文实例讲述了PHP读取文件,解决中文乱码UTF-8的方法.分享给大家供大家参考,具体如下: $opts = array( 'file' => array( 'encoding' => "utf-8" ) ); $opts = array('http' => array('encoding' => 'utf-8')); $ctxt = stream_context_create($opts); $content = file_get_contents($file

  • Java Web开发项目中中文乱码解决方法汇总

    Java Web项目中,解决中文乱码方法总结如下 第一种情况:调用jsp页面中文显示乱码 问题描述:通过浏览器调用jsp页面,在浏览器中显示的中文内容出现乱码. 解决方法:首先确认本jsp在编辑器中保存文件内容时,使用的是utf-8的编码格式,然后在jsp页面的开始处添加<%@ pageEncoding="utf-8"%>就可以解决这种中文乱码问题 第二种情况:调用servlet页面显示乱码 问题描述:通过浏览器调用servlet,servlet在浏览器中显示的内容出现乱码

  • 解决Java中properties文件编码问题

    目录 1.properties文件显示乱码问题 2.读取properties文件乱码 3.Spring boot的@ConfigurationProperties读取properties文件乱码 总结 1.properties文件显示乱码问题 原因是因为properties默认使用ASCII码,就算在文件中填写了中文,再打开后依然会转换成ASCII码的形式.首先确定properties配置文件的编码格式,通常情况下properties的默认编码格式为ISO-8859-1.更改properties

  • 解决Java & Idea启动tomcat的中文乱码问题

    问题描述 idea启动tomcat后乱码了,并且,idea的各种编码都是设置的为UTF-8,但是中文就是乱码了. 解决方法 进入idea的安装目录, 进入bin目录下.找到idea.exe.vmoptions这个文件 和 idea64.exe.vmoptions, 在两个文件的最后一行加入 -Dfile.encoding=UTF-8. 重启idea,再次启动tomcat,乱码问题应该就解决了. 在Idea上点击我的Tomcat我的小猫----> 选择第一个Edit Configuration 到

  • iOS读取txt文件出现中文乱码的解决方法

    一.情景描述: 后台给一个txt文件,编码是utf-8,在Mac电脑Xcode开发环境下读取txt文件内容,汉字会出现乱码,英文没有乱码这种情况. 二.尝试解决方法: 修改编码格式,尝试了NSUTF16StringEncoding,NSUTF8StringEncoding,NSASCIIStringEncoding编码等,出现的问题有时是中文乱码,有时是utf-8不能打开文件问题,最终问题都没能解决. 三.猜测原因: txt文件是从window电脑上创建,有可能和环境有关,第二,编码问题. 四.

  • .Net Core读取文件时中文乱码问题的解决方法分享

    目录 背景 问题 .NETFramework中的默认属性 .NETCore上的默认属性 解决办法 附.NetCore下读取配置文件中文乱码 总结 背景 今天在使用core web api上传txt文档的时候本来很顺利的,但是一测试发现读取的中文内容是乱码的,很是纳闷. 出于经验,立马把代码的Encoding.Default改成 Encoding.uft8, 发现还是不行.后面索性把上传的文件另存为下,特地选择带有bom的utf8选项. 但是发现还是乱码.郁闷. 问题 于是在本能的百度下,发现方法

  • vue导出excel文件流中文乱码问题及解决

    目录 导出excel文件流中文乱码 导出excel乱码(锟斤拷唷?锟?:锟斤拷) 导出excel文件流中文乱码 解决此方法很多网上的差不多都可以.一下提供简单的方法 loads(){ let data={ userWord:this.dataList.userWord, examId:this.$route.query.id, exportType:this.active, } api.exportUserResult(data).then((res) => { const blob = new

  • Java读写ini文件代码示例

    本文实例主要实现Java读写ini文件,具体如下,代码中有详细注释. 在java中,配置文件一般主要是两种形式:xml文件或者property文件.但大部分人都习惯使用ini文件,而且ini文件的分节以及注释功能,比起xml,也是易懂易用的. 实例代码: package com.epoint.tools; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.OutputStream; im

随机推荐