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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄昆 中级黑马   /  2012-7-1 09:00  /  2815 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

file.txt文件中的内容
abcd0
abcd1
abcd2
abcd3
abcd4
import java.io.*;
class BufferedReader
{
        public static void main(String[] args) throws IOException
        {
                FileReader fr=new FileReader("file.txt");
                BufferedReader bufr=new BufferedReader(fr);
                String line=null;
                while((line=bufr.readLine())!=null)
                {
                        System.out.println(line);//System.out.println(bufr.readLine());两次的结果为什么不一样呀?
                }
                bufr.close();
        }
}

8 个回复

正序浏览
while((line=bufr.readLine())!=null)
                 {
                         System.out.println(line);
                System.out.println(bufr.readLine());
                 }
因为在while循环里面已经读取了一行数据,将它存到line这个字符串变量中,而readLine()方法其实也是调用了read()方法读取单个字符,每当读取一个字符后,指针就会指向下一个字符,所以readLine()方法也会自动的向后面移一行,因此执行System.out.println(bufr.readLine());这句话的时候,其实是将第二行打印了出来。

评分

参与人数 1技术分 +1 收起 理由
刘蕴学 + 1

查看全部评分

回复 使用道具 举报
readline()每次读一行后会有标记,下次读另一行,依次进行
回复 使用道具 举报
楼主已经把读取的一行付给line这个变量了,要是在调用一次只会多此一举,只需要直接打印line就行了
,在调用readLine只会读取下一行,因为readLine自动会向下打印。
回复 使用道具 举报
还有,就像板凳说的,如果你用BufferedReader来做自定义类名,组长真的会找你玩命.
回复 使用道具 举报
如果你是要读取所有文本数据的话.        
public static void main(String[] args) throws IOException
        {
                FileReader fr=new FileReader("file.txt");
                BufferedReader bufr=new BufferedReader(fr);
                String line=null;
                while((line=bufr.readLine())!=null)//while循环进行判断的时候,已经执行了一次readLine(),此时游标指向第一行,将第一行数据读入缓冲区.         
                {
                        System.out.println(line);//正确,直接将缓冲区的数据输出
                        System.out.println(bufr.readLine());//错误,又执行了一次readLine()方法,原来缓冲区里是数据没有读取就被刷新,游标指向第二行,将第二行的数据输出,
                }
                bufr.close();
        }
回复 使用道具 举报
class BufferedReader{
}
楼主类名不要跟java提供的重复否者会让你死都不知道怎么死的。。。
回复 使用道具 举报
当然不一样,readline方法是一次读一行,不是每次都读第一行。
是一行一行挨个读下去的,楼主再仔细看一下io流的视频吧。

评分

参与人数 1技术分 +1 收起 理由
王昭珽 + 1 鼓励一下

查看全部评分

回复 使用道具 举报
  System.out.println(line);//System.out.println(bufr.readLine());两次的结果为什么不一样呀?


肯定不一样啊!在while条件语句中,bufr已经读取过一行数据了,也就是line;而bufr.readLine()是又一次读取了一行数据,也就是说是读取的line下面的一行数据,所以不一样。
比如line=abcd0,则bufr.readLine()=abcd1 。

评分

参与人数 1技术分 +1 收起 理由
王昭珽 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马