黑马程序员技术交流社区

标题: 关于BufferedReader读取文本文件内容的问题 [打印本页]

作者: 王春蕾    时间: 2014-4-22 10:37
标题: 关于BufferedReader读取文本文件内容的问题
我定义了一个使用BufferedReader读取文本文件的方法,代码如下:
  1.         /**
  2.          * 使用BufferedReader读取文本文件内容
  3.          * @param bufr
  4.          * @return
  5.          * @throws IOException
  6.          */
  7.         public static String  ReadFileText(BufferedReader bufr) throws IOException {
  8.                 String lineContent=null;
  9.                 StringBuilder sb=new StringBuilder();
  10.                 while((lineContent=bufr.readLine())!=null)
  11.                 {
  12.                         sb.append(lineContent);
  13.                         sb.append(LINE_SEPARATOR);
  14.                 }
  15.                 lineContent=sb.toString();
  16.                 return lineContent;
  17.         }
复制代码

while循环的条件能不能写成:while((lineContent=bufr.readLine())!="")
这两个有什么区别呢?
PS:两种方式运行结果截然不同
作者: 坏米饭    时间: 2014-4-22 11:26
""和null一样吗。。。
作者: 你为谁归来    时间: 2014-4-22 11:28
null代表的是空。“”代表的是空字符串,肯定不一样啦~
作者: 。烊了    时间: 2014-4-22 11:31
哥们,
1,这还是那个亘古不变的==  与 equals()的区别问题呀,你这里!=“”,表示的是读取到的字符串地址是否与“”的地址相等,很显然 这几乎不可能,所以你的程序必然会陷入死循环。
2,null 与 “”是完全两个东西,比如一个框子,null就表示什么都没有,连这个框子本身都没有,而“”表示框子里面没有东西
3,如果你想达到读取到“”就停止的话可以使用: while(!(lineContent=bufr.readLine()).equals(""))

作者: ⒈心只霸占沵    时间: 2014-4-22 11:32
是个死循环吗?
readLine(); 读到末尾就返回null,你要是读到末尾了,你拿null和“”比较,肯定不行啊,你可以查查API
作者: SyouRai_Tsk    时间: 2014-4-22 12:13
读取一个字符是当一个对象来看,所以不能使用"",""的含义是空串,而非对象为空
作者: 闲人    时间: 2014-4-22 12:51
本帖最后由 闲人 于 2014-4-22 12:53 编辑

null是空
“”是空白字符串
此空非彼空
打个比方:
          当你文本中有 “afdasfasd afdasfsad”时
              如果是null,他会全部写完“afdasfasd afdasfsad”
             如果是”“,它只会写“afdasfasd”





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