一段代码:
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=中文
????请问怎么使得第二次输出正常?

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【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
      

  2.   

    LZ可能没有用中文转码附上代码:j2me里用来读取文件内容的  参考
    // 读取文本内容
    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;
    }
      

  3.   

    一般还跟文本的格式有关系如果lz用eclipse工具的话可以设置文本的属性为UTF-8(点右键可以设置的)
      

  4.   

    将pro.load(ips); 改为
    pro.load(br); 
      

  5.   

    jdk 提供了  一个工具叫做native2ascii.exe   位于 JAVA_HOME/BIN目录下
    对于中文的properties文件 jdk的Properties 先天没有办法直接读取,必须将那个properties文件先用native2ascii进行转换
    把中文变成 /u124/u2332 这种格式
      

  6.   


    这个方法不好,难道要人家每次改完properties文件 再搞一次?
    人家是用户,一定不会买这个程序了
      

  7.   

    lz用的字符流,用这个试试File f = new  File("C:\\Documents and Settings\\Administrator\\workspace\\Test\\bin\\1.txt");
    try {
    BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(f),"utf-8"));
    } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
    } catch (FileNotFoundException e) {
    e.printStackTrace();
      

  8.   


    如果是交付客户的 ,通常不允许随便改动,如果是可允许改动的情况下,都会直接提供整个build 脚本当然如果这些方案都满意,你应该从源头上面防止这个情况出现,比如使用数据库 或者使用xml文件来配置。以我参加的大大小小20多个项目而言,如果用properties都是使用native2asicc如果你需要折衷的解决方案 我记得有人改写过 jdk的properties类 已方便直接读取 等下帮你找找
      

  9.   

    我想的是既然读到的是一个String那么应该有什么编码之类的可以套用
      

  10.   


    你的想法是可行的 
    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 所以第一个参数总是用这个
      

  11.   

    我的txt是用asni格式保存的,第二个参数我用的是gb2312然后正常显示了:
    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"));
    还是不行
    怎么回事
      

  12.   

    试了一下你说的情况,发现用windows notepad另存为的asc的文件 没问题 但是存为utf-8的 文件会让程序读取异常(因为取a的值居然是null)  这样的话 我只能认为是notepad本身的转化utf-8有问题 或者我们的使用方式不对
      

  13.   

    String str=prop.getProperty("a");
    str.getBytes("iso-8859-1"),"utf-8");