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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李征 中级黑马   /  2013-5-26 09:20  /  1335 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李征 于 2013-5-26 13:47 编辑

import java.io.*;
class  Demo
{
public static void main(String[] args) throws IOException
{
  FileReader f = new FileReader("123.txt");
  BufferedReader buf = new BufferedReader(f);
  //Sreing s = null;
  while((buf.readLine())!=null)
  //while((s = buf.readLine())!=null)
  {
   System.out.println(buf.readLine());
   //System.out.println(s);

  }
   buf.close();
}
}
123.txt里就是
1
2
3
4
如果把注释里的内容替换掉现在的内容,那么结果是对的,正常输出,但是把S这个引用去掉,直接用buf.readLine(),就成了隔行输出,结果是:
2
4
null

真心搞不明白了,求解

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

7 个回复

倒序浏览
因为你第一次读 while((buf.readLine())!=null)
你没有保存起来啊。 1 3 都在这里
System.out.println(buf.readLine());
你再打印的时候就是2 4了,

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
要是你用字符串装起来,打印字符串,就可以保证每次取出来的都被打印了!!
回复 使用道具 举报
while((buf.readLine())!=null)
  //while((s = buf.readLine())!=null)

关键是这两句 你发现没   第二句 是 s = buf.readLine())   将读出的数据赋值给s  每次都要赋值给s  循环一次 就复制一次啦。。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报
本帖最后由 student 于 2013-5-26 09:38 编辑

你在while循环条件中,调用buf.readLine()方法,读取文本文件123.txt里的一行数据,然后返回该行数据内容。
但是你在while循环体里System.out.println(buf.readLine()),表示读取下一行,所以只输出第2行和第4行的数据,
第1行和第3行是数据虽然读取到了,但是没有System.out.println()输出,所以运行结果只有2和4。

评分

参与人数 1技术分 +1 收起 理由
袁梦希 + 1 很给力!

查看全部评分

回复 使用道具 举报

  1. import java.io.*;
  2. class  Demo
  3. {
  4. public static void main(String[] args) throws IOException
  5. {
  6.   FileReader f = new FileReader("d:\\1.txt");
  7.   BufferedReader buf = new BufferedReader(f);
  8.   //String s = null;
  9.   while((buf.readLine())!=null)//***********@1
  10.   //while((s = buf.readLine())!=null)
  11.   {
  12.    System.out.println(buf.readLine());//*************@2
  13.    //System.out.println(s);

  14.   }
  15.    buf.close();
  16. }
  17. }

  18. /*
  19. 这个程序没有加 String s 的操作流程是
  20. 1. @1 读取        @1 = 1;
  21. 2. @2 读取        @2 = 2;
  22. 3. @2 打印        @2 输出2
  23. 4. @1 读取        @1 = 3;
  24. 5. @2 读取        @2 = 4;
  25. 6. @2 打印        @2 输出4
  26. */
复制代码
回复 使用道具 举报
李征 中级黑马 2013-5-26 13:47:00
7#
谢谢楼上的亲们,我懂了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马