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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黑马华 中级黑马   /  2013-4-29 12:12  /  1643 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黑马华 于 2013-4-29 17:22 编辑

我现在把1.txt复制到2.txt中,代码如下:
  1. package com.itheima;
  2. import java.io.*;
  3. class CopyText
  4. {
  5.         public static void main(String[] args) throws IOException
  6.         {
  7.                 copy();
  8.         }
  9.         public static void copy() throws IOException
  10.         {
  11.                 FileWriter fw = null;
  12.                 FileReader fr = null;
  13.                 try
  14.                 {
  15.                         fw = new FileWriter("d:/2.txt");
  16.                         fr = new FileReader("d:/1.txt");
  17.                         char[] buf = new char[1024];
  18.                         int len = 0;
  19.                         while((len=fr.read(buf))!=-1)
  20.                         {
  21.                                 fw.write(buf,0,len);
  22.                         }
  23.                 }
  24.                 catch (IOException e)
  25.                 {
  26.                         throw new RuntimeException("读写失败");
  27.                 }
  28.                 finally
  29.                 {
  30.                                         fr.close();
  31.                                         fw.close();
  32.                 }
  33.         }

  34. }
复制代码
2.txt复制前已经存在,为什么不管2.txt的内容与1.txt的内容是否相同都会被覆盖?为什么不是在后面追加内容或者重新生成一个x.txt的文件.  呵呵,或许以前那个老师讲过我给忘了

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

9 个回复

倒序浏览
因为你第21行代码是 fw.write(buf,0,len);这样一般是从文件的开始写的,要是在原来的内容后面追加要用append()方法。至于要想重新生成一个文件,就必须你自己在程序中自己设定了,
回复 使用道具 举报
郭军亮 发表于 2013-4-29 12:20
因为你第21行代码是 fw.write(buf,0,len);这样一般是从文件的开始写的,要是在原来的内容后面追加要用appen ...

fw.write(buf,0,len)只是把缓冲里的内容写到2.txt吧?并不是说从2.txt开头写吧。
回复 使用道具 举报
FileWriter fw = null;
// 传递一个参数true,代表不覆盖已有的文件,并在已有的文件的末尾处继续写
fw = new FileWriter("文件", true);
回复 使用道具 举报
哦,刚看了一下帮助文档,就是这么规定的,不想覆盖就得设置吧应该
回复 使用道具 举报
你运行一次就是开启一个新的流,他肯定不会管之前创建同名的文件。
回复 使用道具 举报
FileWriter有四个构造方法,你使用的是创建一个新文件
覆盖同名文件内容的构造函数。
FileWriter(File file)
          根据给定的 File 对象构造一个 FileWriter 对象。
FileWriter(File file, boolean append)
          根据给定的 File 对象构造一个 FileWriter 对象。
FileWriter(FileDescriptor fd)
          构造与某个文件描述符相关联的 FileWriter 对象。
FileWriter(String fileName)
          根据给定的文件名构造一个 FileWriter 对象。
FileWriter(String fileName, boolean append)
          根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。

使用这个FileWriter(String fileName, boolean append) 构造函数第二个参数传入true就不会覆盖了
回复 使用道具 举报
头像很给力
回复 使用道具 举报
袁梦希 发表于 2013-4-29 14:37
头像很给力

哈哈,你那头像怎么搞的啊?ps的啊
回复 使用道具 举报
黑马华 发表于 2013-4-29 17:18
哈哈,你那头像怎么搞的啊?ps的啊

一般美图秀秀最给力

评分

参与人数 1黑马币 +11 收起 理由
此去经年 + 11 很给力!

查看全部评分

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