当前位置: 技术问答>java相关
Properties类的中文问题,请高手回答,高分送上
来源: 互联网 发布时间:2015-08-31
本文导语: String name = "中文"; //此test.txt文件已经存在 File test = new File ("c:\test.txt"); File temp = new File ("c:\temp.txt"); FileInputStream fin = new FileInputStream(test); FileOutputStream fout = new FileOutStream(fout); Properties prop = new Properties(); prop....
String name = "中文";
//此test.txt文件已经存在
File test = new File ("c:\test.txt");
File temp = new File ("c:\temp.txt");
FileInputStream fin = new FileInputStream(test);
FileOutputStream fout = new FileOutStream(fout);
Properties prop = new Properties();
prop.load(fin);
prop.put("Name",name);
prop.store(fout,"");
fin.close();
fout.close();
test.delete();
temp.renameTo(test);
问题就在name为中文,在生成的test.txt文件中成了:
name=u4E2Du6587
我想在test.txt中看到的是:name=中文
这样可以实现吗,应该如何实现呢?因为我想这个文件内容是一个key一个value值,我只想到用Properties类去实现。
不知道有没有其他的方法将这样文件创建这种文件呢??
|
告诉你一个不幸的消息,properties的load方法是有问题的。我曾经研究过这个问题。我跟踪load方法,一直到一个class中,具体我记不清了。好象是因为load是以ISO8859-1来FileInputStream,但实际FileInputStream在中文环境下是“GBK"。解决办法是:不采用读文本的方式,而是通过实现接口ListResourceBoundle,生成的class就可以被看成是一个文本。具体参看ResourceBoudle的使用。
|
转换一下编码试试
private String toChinese(String s){
String temp = "";
try{
temp = new String(s.getBytes("ISO8859-1"),"GBK");
}
catch(java.io.UnsupportedEncodingException e){
}
return temp;
}
private String toChinese(String s){
String temp = "";
try{
temp = new String(s.getBytes("ISO8859-1"),"GBK");
}
catch(java.io.UnsupportedEncodingException e){
}
return temp;
}
|
关注.
|
读取都因为转码!
|
private static ResourceBundle[] interfaceLabel;
static{
try {
interfaceLabel = new ResourceBundle[LANGUAGE_KIND];
interfaceLabel[ENGLISH] = ResourceBundle.getBundle("eclabel",Locale.US);
interfaceLabel[SIMPLIFIED_CHINESE] = ResourceBundle.getBundle("eclabel",Locale.SIMPLIFIED_CHINESE);
} catch (MissingResourceException mre) {
System.err.println("eclabel.properties not found");
}
}
public final static String getLabel(String key,int language)throws MissingResourceException {
return interfaceLabel[language].getString(key);
}
static{
try {
interfaceLabel = new ResourceBundle[LANGUAGE_KIND];
interfaceLabel[ENGLISH] = ResourceBundle.getBundle("eclabel",Locale.US);
interfaceLabel[SIMPLIFIED_CHINESE] = ResourceBundle.getBundle("eclabel",Locale.SIMPLIFIED_CHINESE);
} catch (MissingResourceException mre) {
System.err.println("eclabel.properties not found");
}
}
public final static String getLabel(String key,int language)throws MissingResourceException {
return interfaceLabel[language].getString(key);
}
|
试过我的用properties文件的方法了吗?