黑马程序员技术交流社区

标题: IO流中的小细节 [打印本页]

作者: 谜燕    时间: 2014-3-16 22:32
标题: IO流中的小细节
  1. import java.io.*;

  2. class  CopyTextByBuf
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 BufferedReader bufr = null;
  7.                 BufferedWriter bufw = null;

  8.                 try
  9.                 {
  10.                         bufr = new BufferedReader(new FileReader("BufferedWriterDemo.java"));
  11.                         bufw = new BufferedWriter(new FileWriter("bufWriter_Copy.txt"));

  12.                         //String line = null;

  13.                         while((String line=bufr.readLine())!=null)//就是这个String类型
  14.                         {
  15.                                 bufw.write(line);
  16.                                 bufw.newLine();
  17.                                 bufw.flush();

  18.                         }
  19.                 }
  20.                 catch (IOException e)
  21.                 {
  22.                         throw new RuntimeException("读写失败");
  23.                 }
  24.                 finally
  25.                 {
  26.                         try
  27.                         {
  28.                                 if(bufr!=null)
  29.                                         bufr.close();
  30.                         }
  31.                         catch (IOException e)
  32.                         {
  33.                                 throw new RuntimeException("读取关闭失败");
  34.                         }
  35.                         try
  36.                         {
  37.                                 if(bufw!=null)
  38.                                         bufw.close();
  39.                         }
  40.                         catch (IOException e)
  41.                         {
  42.                                 throw new RuntimeException("写入关闭失败");
  43.                         }
  44.                 }
  45.         }
  46. }
复制代码

为什么那个String类型不能加入到while循环中
作者: 往事如烟    时间: 2014-3-17 22:51
String line=bufr.readLine(); 这个是声明变量一条语句,而不是一个能用来做判断值。
(line=bufr.readLine()) !=null;而这个是一个运算语句while才能判断,
作者: darkpiece    时间: 2014-3-17 23:22
readline()方法返回一个string类型的值 while(( line=bufr.readLine())!=null)是在做判断告诉你返回值不为空,
前面可以写 String line;while(( line=bufr.readLine())!=null){bufw.write(line);}
作者: 王竞    时间: 2014-3-17 23:30
你先要理解while循环的条件,条件的意思是当读取到一行的内容不为空的时候才执行循环体,关键不在于这个String类型上,你可以写为
1、
                        String line = null;
                        while((line=bufr.readLine())!=null)//就是这个String类型
                        {
                                bufw.write(line);
                                bufw.newLine();
                                bufw.flush();

                        }
2:
                       String line = null;

                        while((String line=bufr.readLine())!=null)//就是这个String类型
                        {
                                String str = line;//当然这种做法可是大费周章了
                                bufw.write(str);
                                bufw.newLine();
                                bufw.flush();

                        }
作者: Alexander    时间: 2014-3-18 11:45
while((String line=br.readLine()) != null)
因为while(boolean)循环里面判断的是boolean类型变量,能赋值操作,但不能定义变量。最终要进行true,false判断,赋值只是将br.readLine()返的值赋给line然后拿line来做判断,这样不会改变判断的结果,
但是如果定义变量,你想,将返回的值赋值给定义的String类型的line变量,这明显说不过去
所以,变量要在while循环之前定义好,里面直接赋值就行了





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