java程序读取properties配置文件出现中文乱码
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java程序读取properties配置文件出现中文乱码相关的知识,希望对你有一定的参考价值。
我编写了一个很简单的程序,读取配置文件(.properties)里的数据。主要代码部分如下:InputStream in = new FileInputStream("E:\\张兆祥_软件开发工具\\开发工具安装后的\\eclipse\\事例程序\\dbexamples\\bin\\chapter\\user.properties");
Properties property=new Properties();
property.load(in);
String username=property.getProperty("username");
String password=property.getProperty("password");
pstmt.setString(1,username);
pstmt.setString(2,password);
pstmt.executeUpdate();
其中的pstmt.set...为插入数据库时的语句,但是当我改成向控制台输出的时候依然是乱码password是英文,所以没问题,就是那个username,因为是中文,输出为:???×?é不知道该怎么解决,求教哪个高手赐教!!
第一种办法:如楼上所说的那样也可以,就是native2ascii -reverse -encoding gb2312 user.properties ActionName_zh_CN.properties这样以后,你打开ActionName_zh_CN.properties的内容,再将ActionName_zh_CN.properties文件这样置:native2ascii ActionName_zh_CN.properties userChange.properties 然后你的程序读userChange.properties的内容就可以。
第二种办法是:
如你代码里写的,你可以在String username=property.getProperty("username");之后,添加JAVA代码页可以将乱码转为中文的。用如下语句就可以了,resultName=new String(username.getBytes("ISO-8859-1"),"gbk"); 然后再用resultName就可以了,不过这样的话你下面的String password=property.getProperty("password");
都慢慢的通过上面的java代码去转。
不知道你对反射熟悉不?如果熟悉的话可以通过反射机制去做第二种办法的转码就方便多了! 参考技术A 你的properties文件编译过了吗?凡是有非西欧的字符都应该事先编译的,具体方法如下:
比如你有一个1.properties文件(含有非西欧字符),你可以在cmd窗口中切换到1.properties文件所在目录,然后输入native2ascii -reverse -encoding gb2312 1.properties ActionName_zh_CN.properties
1.properties为转换之前的文件名 ActionName_zh_CN.properties为转换之后的文件名,其中-encoding后面的gb2312是可以变的如 utf-8等
参考资料:http://hi.baidu.com/644792799/blog/item/54e0d530bc511415ebc4af53.html
java 中properties 类读取k-v配置文件
properties 读取的配置文件key和values都是string 类型
package com.bjsxt.others.pro; import java.util.Properties; /** * Properties 资源配置文件的读写 * 1、key 与value 只能为字符串 * 2、存储与读取 * setProperty(String key, String value) * getProperty(String key, String defaultValue) * @author Administrator * */ public class Demo01 { /** * @param args */ public static void main(String[] args) { //创建对象 Properties pro =new Properties(); //存储 pro.setProperty("driver", "oracle.jdbc.driver.OracleDriver"); //pro.setProperty("url", "jdbc:oracle:thin:@localhost:1521:orcl"); pro.setProperty("user", "scott"); pro.setProperty("pwd", "tiger"); //获取 String url =pro.getProperty("url","test"); System.out.println(url); } }
package com.bjsxt.others.pro; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.Properties; /** * 使用Properties 输出到文件 * 资源配置文件: * * 1、.properties * store(OutputStream out, String comments) store(Writer writer, String comments) 2、.xml storeToXML(OutputStream os, String comment) :UTF-8字符集 storeToXML(OutputStream os, String comment, String encoding) * @author Administrator * */ public class Demo02 { /** * @param args * @throws IOException * @throws FileNotFoundException */ public static void main(String[] args) throws FileNotFoundException, IOException { //创建对象 Properties pro =new Properties(); //存储 pro.setProperty("driver", "oracle.jdbc.driver.OracleDriver"); pro.setProperty("url", "jdbc:oracle:thin:@localhost:1521:orcl"); pro.setProperty("user", "scott"); pro.setProperty("pwd", "tiger"); //存储到e:/others 绝对路径 盘符: //pro.store(new FileOutputStream(new File("e:/others/db.properties")), "db配置"); //pro.storeToXML(new FileOutputStream(new File("e:/others/db.xml")), "db配置"); //使用相对路径 当前的工程 // pro.store(new FileOutputStream(new File("db.properties")), "db配置"); // pro.store(new FileOutputStream(new File("src/db.properties")), "db配置"); pro.store(new FileOutputStream(new File("src/com/bjsxt/others/pro/db.properties")), "db配置"); } }
package com.bjsxt.others.pro; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.Properties; /** * 使用Properties读取配置文件 * 资源配置文件: * 使用相对与绝对路径读取 * load(InputStream inStream) load(Reader reader) loadFromXML(InputStream in) * @author Administrator * */ public class Demo03 { /** * @param args * @throws IOException * @throws FileNotFoundException */ public static void main(String[] args) throws FileNotFoundException, IOException { Properties pro=new Properties(); //读取 绝对路径 //pro.load(new FileReader("e:/others/db.properties")); //读取 相对路径 pro.load(new FileReader("src/com/bjsxt/others/pro/db.properties")); System.out.println(pro.getProperty("user", "bjsxt")); } }
package com.bjsxt.others.pro; import java.io.IOException; import java.util.Properties; /** * 使用类相对路径读取配置文件 * bin * @author Administrator * */ public class Demo04 { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { Properties pro =new Properties(); //类相对路径的 / bin //pro.load(Demo04.class.getResourceAsStream("/com/bjsxt/others/pro/db.properties")); //"" bin pro.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("com/bjsxt/others/pro/db.properties")); System.out.println(pro.getProperty("user", "bjsxt")); } }
以上是关于java程序读取properties配置文件出现中文乱码的主要内容,如果未能解决你的问题,请参考以下文章
java中读取配置文件ResourceBundle和Properties两种方式比较