黑马程序员技术交流社区

标题: 关于IO流缓冲区复制 [打印本页]

作者: 黑马陈旭东    时间: 2012-6-6 12:33
标题: 关于IO流缓冲区复制
public class BufferWriteTest {
/**
  * @param args
  * @throws IOException
  *//*
  * 通过缓冲区来完成文本文件的复制。
  */
public static void main(String[] args) throws IOException {
  
  //输入,读
  FileReader fr = new FileReader("E:\\Test.txt");
  //输入缓冲区
  BufferedReader br = new BufferedReader(fr);
  
  //输出,写
  FileWriter fw = new FileWriter("D:\\buffer.txt");
  //输出缓冲区
  BufferedWriter bw = new BufferedWriter(fw);
  
  //读数据、
/* while(br.read()!=-1)
  {
   bw.write(br.read());
   bw.flush();
   
  }*/
  //这样一个字一个字的写效率太慢,所以我们用读一行写一行的
  
  while(br.readLine()!=null)
  {
   bw.write(br.readLine());
   bw.newLine();
   bw.flush();
//我没用变量,直接这样读写,但是写入的只有源文件的一部分。

String line = null;
  while((line=br.readLine())!=null)
  {
   bw.write(line);
   bw.newLine();
   bw.flush();
   
   
  }
//但是如果我用了变量,就可以写入源文件的全部,刚开始我以为是缓冲区容量的问题,
后来发现不是。谁能告诉我为什么?


   
   
  }
  br.close();
  bw.close();
  
  
  
}
}

作者: 赵玮_Tom    时间: 2012-6-6 12:40
look the pic

io.png (12.94 KB, 下载次数: 14)

io.png

作者: 梁小波    时间: 2012-6-6 12:42
while(br.readLine()!=null)
  {
  bw.write(br.readLine());
这两行代码出错了!
本来在while中就读了一行数据;但你的  bw.write(br.readLine());中又读了一行;
也就是说,在while中读的数据没有打印就读下一行了;所以在只有一半!
你可以用变量刚好解决这个问题。

作者: 黑马陈旭东    时间: 2012-6-6 13:32
梁小波 发表于 2012-6-6 12:42
while(br.readLine()!=null)
  {
  bw.write(br.readLine());

呵呵!原来是这样




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