一段代码:
import java.util.*;
import java.io.*;
public class a { public static void main(String[] args) throws Exception {
File f = new File("C:\\Documents and Settings\\Administrator\\workspace\\Test\\bin\\1.txt");
FileReader rd = new FileReader(f);
BufferedReader br = new BufferedReader(rd);
String str = br.readLine();
System.out.println(str);
rd.close();
InputStream ips = a.class.getClassLoader().getResourceAsStream("1.txt");
Properties pro = new Properties();
pro.load(ips);
String str2 = pro.getProperty("aa");
System.out.println(str2);
ips.close();
}}当1.txt内容是:aa=1111
显示:
aa=1111
1111当1.txt内容是:aa=中文
显示:
aa=中文
????请问怎么使得第二次输出正常?
import java.util.*;
import java.io.*;
public class a { public static void main(String[] args) throws Exception {
File f = new File("C:\\Documents and Settings\\Administrator\\workspace\\Test\\bin\\1.txt");
FileReader rd = new FileReader(f);
BufferedReader br = new BufferedReader(rd);
String str = br.readLine();
System.out.println(str);
rd.close();
InputStream ips = a.class.getClassLoader().getResourceAsStream("1.txt");
Properties pro = new Properties();
pro.load(ips);
String str2 = pro.getProperty("aa");
System.out.println(str2);
ips.close();
}}当1.txt内容是:aa=1111
显示:
aa=1111
1111当1.txt内容是:aa=中文
显示:
aa=中文
????请问怎么使得第二次输出正常?
楼主【jiangjian0427】截止到2008-07-30 19:12:17的历史汇总数据(不包括此帖):
发帖的总数量:7 发帖的总分数:460 每贴平均分数:65
回帖的总数量:25 得分贴总数量:3 回帖的得分率:12%
结贴的总数量:7 结贴的总分数:460
无满意结贴数:0 无满意结贴分:0
未结的帖子数:0 未结的总分数:0
结贴的百分比:100.00% 结分的百分比:100.00%
无满意结贴率:0.00 % 无满意结分率:0.00 %
敬礼!
取消马甲机器人,请点这里:http://www.java2000.net/mycsdn/robotStop.jsp?usern=jiangjian0427
// 读取文本内容
private String getText(String name) throws IOException {
InputStream is = getClass().getResourceAsStream(name);
if (is != null) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int ch = 0;
// 将文本的内容写入到baos开辟的内存中
while ((ch = is.read()) != -1) {
baos.write(ch);
}
// 返回文本文件内容的字节数组
byte[] text = baos.toByteArray();
baos.close();
// 由于包含中文,所以编码转换为UTF-8
return new String(text, "UTF-8");
} else
return null;
}
pro.load(br);
对于中文的properties文件 jdk的Properties 先天没有办法直接读取,必须将那个properties文件先用native2ascii进行转换
把中文变成 /u124/u2332 这种格式
这个方法不好,难道要人家每次改完properties文件 再搞一次?
人家是用户,一定不会买这个程序了
try {
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(f),"utf-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
如果是交付客户的 ,通常不允许随便改动,如果是可允许改动的情况下,都会直接提供整个build 脚本当然如果这些方案都满意,你应该从源头上面防止这个情况出现,比如使用数据库 或者使用xml文件来配置。以我参加的大大小小20多个项目而言,如果用properties都是使用native2asicc如果你需要折衷的解决方案 我记得有人改写过 jdk的properties类 已方便直接读取 等下帮你找找
你的想法是可行的
package com.prop;import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;public class PropTest {
public static void main(String[] args) throws IOException {
InputStream is=PropTest.class.getClassLoader().getResourceAsStream("a.properties");
Properties prop=new Properties();
prop.load(is);
String str=prop.getProperty("a");
System.out.println(new String(str.getBytes("iso-8859-1"),"utf-8"));
}
}因为我的文件编码是utf-8 所以第二个参数就是utf-8 而properties类读取文件默认在代码中写死了是iso-8859-1 所以第一个参数总是用这个
System.out.println(new String(str.getBytes("iso-8859-1"),"gb2312"));不过我把txt文件用utf-8格式保存之显示又有问题
用gb2312读不出来,然后又改成
System.out.println(new String(str.getBytes("iso-8859-1"),"utf-8"));
还是不行
怎么回事
str.getBytes("iso-8859-1"),"utf-8");