黑马程序员技术交流社区

标题: 关于IO流无意中发现的小问题 [打印本页]

作者: 黄昆    时间: 2012-7-1 09:00
标题: 关于IO流无意中发现的小问题
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();
        }
}
作者: 邓超军    时间: 2012-7-1 09:07
  System.out.println(line);//System.out.println(bufr.readLine());两次的结果为什么不一样呀?


肯定不一样啊!在while条件语句中,bufr已经读取过一行数据了,也就是line;而bufr.readLine()是又一次读取了一行数据,也就是说是读取的line下面的一行数据,所以不一样。
比如line=abcd0,则bufr.readLine()=abcd1 。
作者: Forever。    时间: 2012-7-1 12:15
当然不一样,readline方法是一次读一行,不是每次都读第一行。
是一行一行挨个读下去的,楼主再仔细看一下io流的视频吧。

作者: 黑马罗坚    时间: 2012-7-1 15:08
class BufferedReader{
}
楼主类名不要跟java提供的重复否者会让你死都不知道怎么死的。。。

作者: 周恺    时间: 2012-7-1 15:50
如果你是要读取所有文本数据的话.        
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();
        }

作者: 周恺    时间: 2012-7-1 15:53
还有,就像板凳说的,如果你用BufferedReader来做自定义类名,组长真的会找你玩命.
作者: 杨朔    时间: 2012-7-1 16:02
楼主已经把读取的一行付给line这个变量了,要是在调用一次只会多此一举,只需要直接打印line就行了
,在调用readLine只会读取下一行,因为readLine自动会向下打印。
作者: 陌花╮有意、    时间: 2012-7-1 23:49
readline()每次读一行后会有标记,下次读另一行,依次进行
作者: 吴扬    时间: 2012-7-2 01:13
while((line=bufr.readLine())!=null)
                 {
                         System.out.println(line);
                System.out.println(bufr.readLine());
                 }
因为在while循环里面已经读取了一行数据,将它存到line这个字符串变量中,而readLine()方法其实也是调用了read()方法读取单个字符,每当读取一个字符后,指针就会指向下一个字符,所以readLine()方法也会自动的向后面移一行,因此执行System.out.println(bufr.readLine());这句话的时候,其实是将第二行打印了出来。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2