A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 龙乾坤 初级黑马   /  2012-5-2 00:54  /  2563 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

        FileReader fr=new FileReader("java.txt");
        byte[] b=new byte[1024];
                int len=0;
                while((len=fr.read())!=-1){
              System.out.println(new String(b,0,len));
为什么输出的时候不是文件中的内容呢?而是一些正方形啊

4 个回复

倒序浏览
FileReader fr=new FileReader("java.txt");
         //输入流读取的是字符,不是字节,应该修改为char[] b=new char[1024];
        byte[] b=new byte[1024];
        int len=0;
       //既然你定义了一个容器数组,为了提高效率,但是你并没用他,应修改为while((len=fr.read(b))!=-1)
      //你这样是每次读取一个字符,不能使用String(char [] a,0,len)的方法,
      
      while((len=fr.read())!=-1){
              System.out.println(new String(b,0,len));

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 贾联国 于 2012-5-2 01:53 编辑

读字符流的数据用字节流的while((len=fr.read())!=-1)是不合适的
最好用缓冲BufferedReader 进行字符文件的操作,因为BufferedReader
里面有readLine
所以我们选择用什么流的时候要明确源和目的
附上正确写法:

import java.io.*;
class  ReadDemo
{
        public static void main(String[] args) throws IOException
       {
                FileReader fr=new FileReader("java.txt");
                 char[] b=new char[1024];
                int len=0;
                while((len=fr.read(b))!=-1)
                {
                       System.out.println(new String(b,0,len));
                }
  
        }
}
我们不推荐上面的写法,推荐下面的写法:

import java.io.*;
class  ReadDemo
{
        public static void main(String[] args) throws IOException
        {
                BufferedReader  buf=new BufferedReader (new FileReader("java.txt"));
                String line =null;
                while((line=buf.readLine())!=null)
                                {
                                        System.out.println(line);
                                }
               
        }
}

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

回复 使用道具 举报
这里关键是用的FileReader,这是字符流,
所以你用read()读出的是一个字符,
我想你的本意是读出一串数组大小的字符,
这里你首先是要把byte[] b=new byte[1024];改成char[] b=new byte[1024] ;
然后你需要用read(b)这个读方法。
回复 使用道具 举报
    对于楼主的问题,漏洞不少,我就将错就错,就用楼主的代码分析分析
  public static void main(String[] args)throws Exception {
                FileReader fr=new FileReader("F:\\a.txt");
        byte[] b=new byte[1024];//此处数组元素默认1024个0
                int len=0;
                while((len=fr.read())!=-1){//此处没有给b赋值,只是从文本里单个读取字符转换成int型
                        //System.out.println(len);//为了证明上一句。
                //        System.out.println((char)len);//强制转换还原成字符型,还是为了证明上一句
              System.out.println(new String(b,0,len));
              //因为一直没有给b重新赋值,所以此处表明的将b转换成字符串,因为0转换成字符就刚好是那个方块,个数就是当前字符转换成int型的数
               }
        }
其实这块代码打印的结果确实没什么意义,只是对代码的错误分析分析。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马