黑马程序员技术交流社区

标题: 问题求助 [打印本页]

作者: 清心玉质    时间: 2013-8-9 15:42
标题: 问题求助
本帖最后由 清心玉质 于 2013-8-9 16:41 编辑

下面写了两段代码:
一个是创建文件,写了十行文字;
另一个是读取这十行文字。
问题就在readline这块,如果没有定义line= readline()的话,打印的是奇数行。
我要进黑马...1
我要进黑马...3
我要进黑马...5
我要进黑马...7
我要进黑马...9
为什么没有打印全部呢?
*/
public class BufferWriterDemo {
/**
  * @param args
  * @throws IOException
  */
public static void main(String[] args) throws IOException {
  // TODO Auto-generated method stub
  FileWriter fw = new FileWriter("F:\\ai.txt");
  BufferedWriter buw = new BufferedWriter(fw);
  
  for (int x=0;x<10;x++)
  {
   buw.write("我要进黑马"+"..."+x);
   buw.newLine();
  }
  
  buw.close();
}
}
class BufferedReaderDemo
{
public static void main(String[] args) throws IOException {
  FileReader fr = new FileReader("F:\\ai.txt");
  BufferedReader bur = new BufferedReader(fr);
  
    while((bur.readLine())!=null)
   {
    System.out.println(bur.readLine()   }
  bur.close();
}

}


作者: xkfxm    时间: 2013-8-9 16:03
  1. class BufferedReaderDemo
  2. {
  3. public static void main(String[] args) throws IOException {
  4.   FileReader fr = new FileReader("F:\\ai.txt");
  5.   BufferedReader bur = new BufferedReader(fr);
  6.   String line = null;
  7.     while((line = bur.readLine())!=null)
  8.    {
  9.     System.out.println(line) ;
  10.     }
  11.   bur.close();
  12. }

  13. }
复制代码
楼主好,你的写入流成功了,在记事本文件中看到有十条数据;
但是读取的时候,你打印的是System.out.println(bur.readLine()   ;
首先要明白,read方法的原理,它读取数据时会一次向后,当读到一个地方时,把读取到的数据打印,下次读取时会接着上一次的读取。
你判断的时候用的是(bur.readLine())!=null,此时已经读了第一行,但是打印的并不是这一行数据,而是又接着重新读取了一行,
所以导致了隔行的的错误。
更正后代码如上
希望帮到你   谢谢
作者: 崔一恒    时间: 2013-8-9 16:14
楼主的问题在你写的以下代码中:
  1. while((bur.readLine())!=null)   //这里读了一行
  2. {
  3.         System.out.println(bur.readLine()   }    //这里又读了另一行
  4.         bur.close();    //?
  5. }
复制代码
并且,楼主在关资源的时候写在了循环里面,我想是往这儿搬得时候写错的吧。
作者: 清心玉质    时间: 2013-8-9 16:40
谢谢大家,学习了~~




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