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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张卫刚 中级黑马   /  2013-3-16 17:32  /  2049 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张卫刚 于 2013-3-16 21:55 编辑

public static void main(String[] args) throws IOException
        {
                //创建一个读取流对象和文件相关联。
                FileReader fr = new FileReader("buf.txt");

                //为了提高效率。加入缓冲技术。将字符读取流对象作为参数传递给缓冲对象的构造函数。
                BufferedReader bufr = new BufferedReader(fr);
               
                String line = null;

                while((line=bufr.readLine())!=null)//这句为什么不直接写成bufr.readLine()!=null  为什么多定义一个line变量
                {
                        System.out.print(line);
                }
                bufr.close();
        }

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

7 个回复

倒序浏览
while((line=bufr.readLine())!=null)//这句为什么不直接写成bufr.readLine()!=null  为什么多定义一个line变量  
                {
                        System.out.print(line);
                }

因为如果你那么写的话,你的输出语句就要写成 System.out.print(bufr.readLine());?

如果是这样的话,输出的语句就会隔行输出了,应为你的这句话出现的两次bufr.readLine()都要换行的。
但是你要是line=bufr.readLine()的话是每次输出line,是不换行的。
这个我可深有体会。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
      这是跟readLine方法底层实现有关,readLine方法是内部是有指针的,每执行一次readLine方法指针就会向下移动一个位置,这跟集合中的next方法是一个意思。
    在看具体代码,在while(bufr.readLine())中指针指向一个流中字符,我们想输出这个字符,但在打印这个字符时System.out.print(bufr.readLine())又执行了一次bufr.readLine()方法,也就是说指针上次指向的字符还没有打印指针又向下移动了一个,打印的就不是while循环中的bufr.readLine()方法读到的字符而是下一个字符了,所以就用line变量记住bufr.readLine()方法返回的字符,输出时输出line变量就ok啦。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
因为后边要输出读到的内容啊 ,先找一个中间变量存起来  然后输出  ps:36分的大神 这个问题就给技术分  难道斑竹大人好意思不给25的菜鸟点鼓励么。。。{:soso_e197:}

点评

好意思的哟~ 亲~ 你只回答了一句话呀~  发表于 2013-3-16 19:51
回复 使用道具 举报
public static void main(String[] args) throws IOException
        {
                //创建一个读取流对象和文件相关联。
                FileReader fr = new FileReader("buf.txt");

                //为了提高效率。加入缓冲技术。将字符读取流对象作为参数传递给缓冲对象的构造函数。
                BufferedReader bufr = new BufferedReader(fr);
               
                String line = null;

                while((line=bufr.readLine())!=null)//这句为什么不直接写成bufr.readLine()!=null  为什么多定义一个line变量
                {
                        System.out.print(line);
                }
                bufr.close();
        }






点评

把楼主的代码复制一遍是要闹哪样。  发表于 2013-3-16 19:54
回复 使用道具 举报
若还有问题,请继续追问,没问题了,请将帖子分类改成【已解决】~
回复 使用道具 举报
刘凯 金牌黑马 2013-3-16 19:54:31
7#
刘凯 发表于 2013-3-16 19:19
因为后边要输出读到的内容啊 ,先找一个中间变量存起来  然后输出  ps:36分的大神 这个问题就给技术分  难 ...

斑竹大人,虽然就一句话,但就这一句话点破了呀,就是这么个简单的问题嘛 。。。

点评

别跟我来这个,你楼上两位答得很好了,你才那么一句话~ 别的帖子加油吧  发表于 2013-3-16 19:57
回复 使用道具 举报
刘凯 金牌黑马 2013-3-16 19:59:48
8#
刘凯 发表于 2013-3-16 19:54
斑竹大人,虽然就一句话,但就这一句话点破了呀,就是这么个简单的问题嘛 。。。 ...

{:3_60:}  画个圈圈诅咒你 {:3_67:}

点评

。。。。。。。。。 那我也画  发表于 2013-3-16 20:09
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马