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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

// 一、错误示例1
        public void CopyFile() {
                FileReader fr = null;
                FileWriter fw = null;
                try {
                        fr = new FileReader("c:\\xy1.txt"); // ①
                        fw = new FileWriter("c:\\xy2.txt"); // ②
                        char[] charBuffer = new char[1024];
                        int len = 0;
                        while ((len = fr.read(charBuffer)) != -1) {
                                fw.write(charBuffer, 0, len);
                        }
                        System.out.println("文件复制成功");
                } catch (IOException e) {
                        throw new RuntimeException("文件拷贝操作失败");
                } finally {
                        try {
                                fr.close(); // ③
                                fw.close(); // ④
                        } catch (IOException e) {
                                throw new RuntimeException("关闭失败");
                        }
                }
        }

        /*
         * 若①中代码出错,fr根本就没有初始化,执行③的时候就会报空指针异常。②④同样是这个道理。
         *
         *
         * 二、错误示例2
         */
        public void CopyFile1() {
                FileReader fr = null;
                FileWriter fw = null;
                try {
                        fr = new FileReader("c:\\xy1.txt"); // ①
                        fw = new FileWriter("c:\\xy2.txt"); // ②
                        char[] charBuffer = new char[1024];
                        int len = 0;
                        while ((len = fr.read(charBuffer)) != -1) {
                                fw.write(charBuffer, 0, len);
                        }
                        System.out.println("文件复制成功");
                } catch (IOException e) {
                        throw new RuntimeException("文件拷贝操作失败");
                } finally {
                        try {
                                if (null != fr) {
                                        fr.close(); // ③
                                }
                                if (null != fw) {
                                        fw.close(); // ④
                                }
                        } catch (IOException e) {
                                throw new RuntimeException("关闭失败"); // ⑤
                        }
                }
        }

        /*
         * 加上是否为空的判断可以避免空指针异常。但是如果③执行出错,程序会直接进入⑤而④根本没有得到执行,导致无法关闭。
         *
         * 三、正确示例
         */
        public void CopyFile2() {
                FileReader fr = null;
                FileWriter fw = null;
                try {
                        fr = new FileReader("c:\\xy1.txt");
                        fw = new FileWriter("c:\\xy2.txt");
                        char[] charBuffer = new char[1024];
                        int len = 0;
                        while ((len = fr.read(charBuffer)) != -1) {
                                fw.write(charBuffer, 0, len);
                        }
                        System.out.println("文件复制成功");
                } catch (IOException e) {
                        throw new RuntimeException("文件拷贝操作失败");
                } finally {
                        try {
                                if (null != fr) {
                                        fr.close();
                                }
                        } catch (IOException e) {
                                throw new RuntimeException("关闭失败");
                        }

                        try {
                                if (null != fw) {
                                        fw.close();
                                }
                        } catch (IOException e) {
                                throw new RuntimeException("关闭失败");
                        }
                }
        }

3 个回复

倒序浏览
嗯,有用,赞一个!
回复 使用道具 举报
赞一个。
回复 使用道具 举报
赞一个。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马