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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始


  1. import java.io.*;

  2. class  FileTest
  3. {
  4.         public static void main(String[] args) //throws IOException
  5.         {
  6.                 copy_2();
  7.         }
  8.         public static void copy_2()
  9.         {
  10.                 FileReader fr = null;
  11.                 FileWriter fw = null;

  12.                 try
  13.                 {
  14.                         fr = new FileReader("demo.txt");
  15.                         fw = new FileWriter("democopy_2.txt");

  16.                         int len = 0;
  17.                         char[] buf = new char[1024];//定义缓冲区

  18.                         while ((len = fr.read(buf))!=-1)//读入缓冲区
  19.                         {
  20.                                 fw.write(buf,0,len);//这里又写入缓冲区,
  21.                                 //不怕这次写入还没刷新到硬盘,就被下一次
  22.                                 //fr.read(buf)读入覆盖了吗?
  23.                         }
  24.                 }
  25.                 catch (IOException e)
  26.                 {
  27.                         throw new RuntimeException("读写失败");
  28.                 }

  29.                 finally
  30.                 {
  31.                         if (fr!=null)
  32.                         {
  33.                                 try
  34.                                 {
  35.                                         fr.close();
  36.                                 }
  37.                                 catch (IOException e)
  38.                                 {
  39.                                 }
  40.                                
  41.                         }

  42.                         if (fw!=null)
  43.                         {
  44.                                 try
  45.                                 {
  46.                                         fw.close();
  47.                                 }
  48.                                 catch (IOException e)
  49.                                 {
  50.                                 }
  51.                                
  52.                         }
  53.                 }
  54.         }
  55. }
复制代码
while ((len = fr.read(buf))!=-1)//读入缓冲区
{
fw.write(buf,0,len);//这里又写入缓冲区,
//不怕这次写入还没刷新到硬盘,就被下一次
//fr.read(buf)读入覆盖了吗?

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

3 个回复

正序浏览
fw和fr开辟的不是一个内存缓冲。怎么会出现覆盖呢!
就好像在我有两个箱子,一个是frBox,一个是fwBox,从frBox中读取数据,然后放到fwBox中,不在一个Box中操作,怎么会出现覆盖情况呢。是吧

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
嗯 因为定义的缓冲区数组大小是1024  如果数据没超这个限制按照代码顺序执行 最后也有
fr.close();    fw.close(); 所以数据刷新好了   如果超过这个大小  情况是和上面分析的一样主线程从新循环执行 所以并不存在并发 多线程的问题     

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
这是由主线程执行的读取、写入操作。中间不会有等待,都是从上向下执行,不存在并发问题。

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马