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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

1、复制是先把文件写入内存中,然后在通过一个中转存储,然后再写入一个新文件中, 是这样的 吗?我没有看见带有直接copy的方法?
2、下面 这个String line 就是起中转站的作用吗?
3、最后那个finally 可以直接 写成 finally {bufr.close();bufw.close()  }吗?为什么呢?

/*
通过缓冲区复制一个.java文件。

*/
import java.io.*;

class  CopyTextByBuf
{
        public static void main(String[] args)
        {
                BufferedReader bufr = null;
                BufferedWriter bufw = null;

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

                        String line = null;  //这个String line 就是中转站吗?

                        while((line=bufr.readLine())!=null)
                        {
                                bufw.write(line);
                                bufw.newLine();
                                bufw.flush();

                        }
                }
                catch (IOException e)
                {
                        throw new RuntimeException("读写失败");
                }
                finally
                {
                        try
                        {
                                if(bufr!=null)
                                        bufr.close();
                        }
                        catch (IOException e)
                        {
                                throw new RuntimeException("读取关闭失败");
                        }
                        try
                        {
                                if(bufw!=null)
                                        bufw.close();
                        }
                        catch (IOException e)
                        {
                                throw new RuntimeException("写入关闭失败");
                        }
                }
        }
}

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

3 个回复

倒序浏览
String line = null;  //这个String line 就是中转站吗?

是的,原理如毕老师视频中画的IO流程图一样,把图附上请作为参考。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
1.复制文件是一边读取源文件写到内存中,一遍从内存中把读取到的数据写到目标文件的的一个过程
2.String类型的line可以理解为一个中转站
3.finally里面的语句不管前面有木有异常,都会在最后被执行到,所以很多时候都把关闭的语句放在finally语句里面,防止前面抛出异常导致输入输出流无法关闭。

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
是中转站,这个程序 读一行 然后写一行 ,中转站是io缓冲区,也就是内存中的一块
  public void close()
           throws IOException   也就是说close()方法抛出IOException异常,所以必须有捕获机制哦
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马