黑马程序员技术交流社区

标题: 关于java中复制粘贴的问题 [打印本页]

作者: 黑马华    时间: 2013-4-29 12:12
标题: 关于java中复制粘贴的问题
本帖最后由 黑马华 于 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的文件.  呵呵,或许以前那个老师讲过我给忘了
作者: 郭军亮    时间: 2013-4-29 12:20
因为你第21行代码是 fw.write(buf,0,len);这样一般是从文件的开始写的,要是在原来的内容后面追加要用append()方法。至于要想重新生成一个文件,就必须你自己在程序中自己设定了,
作者: 黑马华    时间: 2013-4-29 12:25
郭军亮 发表于 2013-4-29 12:20
因为你第21行代码是 fw.write(buf,0,len);这样一般是从文件的开始写的,要是在原来的内容后面追加要用appen ...

fw.write(buf,0,len)只是把缓冲里的内容写到2.txt吧?并不是说从2.txt开头写吧。
作者: 本人已死    时间: 2013-4-29 12:32
FileWriter fw = null;
// 传递一个参数true,代表不覆盖已有的文件,并在已有的文件的末尾处继续写
fw = new FileWriter("文件", true);
作者: 黑马华    时间: 2013-4-29 12:41
哦,刚看了一下帮助文档,就是这么规定的,不想覆盖就得设置吧应该
作者: 谭威    时间: 2013-4-29 13:13
你运行一次就是开启一个新的流,他肯定不会管之前创建同名的文件。
作者: 丘凤光    时间: 2013-4-29 14:30
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
头像很给力
作者: 黑马华    时间: 2013-4-29 17:18
袁梦希 发表于 2013-4-29 14:37
头像很给力

哈哈,你那头像怎么搞的啊?ps的啊

作者: 袁梦希    时间: 2013-4-29 17:51
黑马华 发表于 2013-4-29 17:18
哈哈,你那头像怎么搞的啊?ps的啊

一般美图秀秀最给力




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2