您好,欢迎来到刀刀网。
搜索
您的当前位置:首页Java读写.properties文件解决中文乱码问题

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

来源:刀刀网
Java读写.properties⽂件解决中⽂乱码问题

⼀般使⽤到properties配置⽂件,⼀般都是在spring项⽬⾥⾯,直接由框架帮你读,当然,你也得考虑到编码的问题。

但是现在要是要求使⽤Java直接读写properties⽂件,就发现很多的问题,⽐如,我的properties⽂件的编码竟然不是utf-8的。或者说我压根就没考虑到这个问题。再⽐如,当properties⽂件⾥⾯有汉⼦的时候,发现读写的汉字乱码了,在我这是因为我的电脑默认编码是gbk,但是读的时候,⼜没有设置编码,搞出的问题。下⾯直接上代码,看问题。

package com.lxk.propertyFileTest;

import java.io.*;

import java.util.Properties; /**

* 读写properties⽂件测试 *

* 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每次都是清空再重写

prop.setProperty(\"phone\

//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⽂件测试 *

* 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\ FileOutputStream oFile = null; try {

//保存属性到b.properties⽂件

oFile = new FileOutputStream(\"b.properties\表⽰追加打开,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编码之后,运⾏的结果,就有⼀丢丢不⼀样。继续参见下图:

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

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

所以,这个我暂时解释不了。惭愧。。。。

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

以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- gamedaodao.com 版权所有 湘ICP备2022005869号-6

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务