private String ReadFile(String path) {
        try {
            String str = "";
            InputStreamReader in = new InputStreamReader(new FileInputStream(path), "GBK");
            BufferedReader br = new BufferedReader(in);
            //BufferedReader br = new BufferedReader(new FileReader(path)); //用这行读就出现乱码
            StringBuilder sb = new StringBuilder();
            while ((str = br.readLine()) != null) {
                sb.append(str + "\n");
            }
            br.close();
            in.close();
            str = sb.toString();
            return str;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
PATH 文件就是我在左面新建的文本文档

解决方案 »

  1.   

    //BufferedReader br = new BufferedReader(new FileReader(path)); //用这行读就出现乱码
    API:FileReader的构造方法假定默认字符编码和默认字节缓冲区大小都是适当的,要自己指定这些值,可以先在 FileInputStream 上构造一个 InputStreamReader。 
      

  2.   

    你得指定编码,你文件用的是GB2312  而java默认的编码是unicode
    所以就出现乱码了 
      

  3.   

    出现乱码,是因为,你在创建Reader对象的时候没有制定该对象按什么样的编码方式来读取数据。
    它会按照默认的编码方式来读取。
    至于默认的编码是什么编码,楼上人为是unicode,我人为应该是你操作系统的默认编码。
    你过你的JVM是跑在中文版的windows系统上,那大多情况,默认编码都是GB2312编码。
    如果你的JVM是跑在Unix系统下,那你不妨查查看,到底是什么编码。很显然,楼主所要读取的文件,其编码是GBK的,所以,指定其编码进行读取,就不会出现乱码情况了。
      

  4.   

    BufferedReader到底采用什么编码方式读取外部资源呢?
    很多人会说UICODE啊,非也
    这个时候采用的编码方式是JVM的默认字符集,这个默认字符集在虚拟机启动时决定,通常根据语言环境和底层操作系统的 charset 来确定。
    楼主可以通过下面的小方法得到JVM的默认字符集,不一定就是UNICODE哦
    Charset.defaultCharset();   
    OK ,开始分析你的问题
    1.很显然你在用InputStreamReader in = new InputStreamReader(new FileInputStream(path), "GBK");这句的时候,你指定读取TXT文件的时候JVM采用GBK编码(也就是说这个时候JVM不用用它默认的编码方式了,而是采用你指定的GBK方式),因为txt文件也是GBK编码的,所以读出来没问题!
    2.但是当你用BufferedReader br = new BufferedReader(new FileReader(path)); 这句的时候,你没有指定读取txt文件用什么编码,也就是说这个时候JVM会采用它默认的编码方式来读取这个txt文件,但是JVM默认是采用什么编码方式呢,就是我上面说的小方法啦。。我相信在楼主的机器上测试出来的JVM默认编码方式肯定不是GBK,要是GBK的话,那句就不会出错误了
    说完了,应该明白了吧。其实我自己认为JAVA的编码方式是个很复杂的东东,所以我觉得5楼的兄弟认识的很清楚,再上面几楼对JAVA编码方式的理解就不敢恭维了
      

  5.   

    最近学javase数组感觉难啊。有什么好的方法吗?多给建议啊 
      

  6.   

    编码问题,在程序中把编码换成"gbk" 或 "gb2310"就行6楼详解
      

  7.   

    我说下我的看法!你说BufferReader采用采用的是jvm默认的编码格式读取的!那定义那个InputStreamReader还有什么用呢!!
    我认为这是这是BufferedReader采用的额是InputStreamReader的编码格式
    我觉得问题就是处在lz的jvm编码格式上!!
    我在我的机子上对一个txt文档读取了没有乱码!!
    BufferedReader raf=new BufferedReader(new FileReader("Test1.txt"));
    这句在我的机子上也可以读取正常!!
    ApI中:
    这么解释的:
    FileReader的构造方法假定默认字符编码和默认字节缓冲区大小都是适当的,要自己指定这些值,可以先在 FileInputStream 上构造一个 InputStreamReader。 这只能说明:你的默认编码符是:Unicode的或者其他编码的!而你的txt采用的gbk编码!!
    因为你用哪种方式可以读取成功
      

  8.   

    也可能你的txt文档不是gbk编码的!!
    你把你的文档保存为  ansi格式的