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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© springing 中级黑马   /  2014-7-24 13:17  /  848 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

try{
                FileWriter f3 = new FileWriter("d://123.txt");
                FileReader fr = new FileReader("d://fw.txt");
                 int m = 0;
             while((m =fr.read())!= -1){
                     f3.write(fr.read());
             }
                f3.close();
                fr.close();
               
                } catch (IOException e ){
                        e.printStackTrace();
                }

这段代码错在哪?为什么复制的文件不和那个一样?

6 个回复

倒序浏览
shijianws 来自手机 中级黑马 2014-7-24 13:34:15
沙发
你用字符流了,想要复制文件用字节流,如果文本可以用字符流,而且要去指定字符编码
回复 使用道具 举报
shijianws 来自手机 中级黑马 2014-7-24 13:42:08
藤椅
字符流还需要刷新缓存吧
回复 使用道具 举报
楼主,while循环中的读没错,但是在写的时候,写入的是你定义的m变量,那fr.read()改成m就好了,读取文本文件用这个字符流没事的
回复 使用道具 举报
shijianws 发表于 2014-7-24 13:42
字符流还需要刷新缓存吧

楼主这边根本就没使用缓冲区,何来的刷新缓存?
回复 使用道具 举报
每次执行read()方法的时候,指针都会向后移动一位,这样的话,比如你原来的文件是abcdefg
循环条件里执行一次,读到了a,但是这里还没有写,然后你代码里又执行了一次read(),指针就停在了b上,此时你写入的时候,就会跳过a,直接将b写到新的文件中,所以写入的时候不应该使用fr.read();因为循环条件的语句,已经将读取到的字符存入到了m中,只要将m写入文件即可
回复 使用道具 举报 1 0
是的。。。有时候看代码看进去了,就是看不出错在哪里。回个头再看 错误就这么明显
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马