问答详情
源自:4-5 字节缓冲流

我这个拷贝功能为什么没有实现呢 ?反而源文件的内容被清空了

package com.File;

import java.io.*;

/**
* Created by Administrator on 2017\8\8 0008.
* 实现文件拷贝:用带缓冲区的字节流来实现
* 写入目标文件不需要判断是否存在,如果不存在,则自动创建
*/
public class CopyFile {
   public static void copyFile(File srcFile,File dstFile)throws IOException{
       if(!srcFile.exists()){
           //抛出异常
           throw new IllegalArgumentException("文件:"+srcFile+"不存");
       }
       if(!srcFile.isFile()){
           //抛出异常
           throw new IllegalArgumentException("不是文件");
       }

       BufferedInputStream bis= new BufferedInputStream(new FileInputStream(srcFile));//默认缓冲区大小
       //BufferedInputStream bis= new BufferedInputStream(new FileInputStream(srcFile),20);指定缓冲区大小

       BufferedOutputStream ois=new BufferedOutputStream(new FileOutputStream(dstFile));
      // BufferedOutputStream ois2=new BufferedOutputStream(new FileOutputStream(dstFile),20);
       int c;
       while((c=bis.read())!=-1){
               ois.write(c);
               ois.flush();//这块必须要刷新缓冲区,否则数据写不进去
       }

       //完成操作之后,需要关闭
       bis.close();
       ois.close();
   }

   public static void main(String[] args)throws IOException {
       CopyFile.copyFile(new File("D:\\U盘\\imooc\\Hello.txt"),new File("D:\\U盘\\imooc\\Hello.txt"));
   }
}

提问者:sunshine_me_1 2017-08-08 04:10

个回答

  • Pikaqiu_01
    2017-10-07 17:23:50

    因为你的源文件和目标文件名称一样,所以在找目标文件时发现了和目标文件名称一样的源文件,就把源文件删除了重新创建了一个文件,所以你的源文件就没有了,老师视频里面有讲到,当你给出一个路径时,如果没有这个文件他会创建这个文件,如果存在这个文件他会把这个文件删除再创建,如果你不想这个已经存在的文件被删除,只是想要续写他,需要再加一个true,如果我没记错应该是:new File("文件路径",true),具体的你可以再听一遍

  • 慕婉清0689395
    2017-08-10 22:56:45

    我试了一下可以实现啊,

      CopyFile.copyFile(new File("E:"+File.separator+"io.txt"),new File("E:"+File.separator+"hello.txt"));//这样可以兼容不同的系统,不建议你那种写法。

  • 于太阳
    2017-08-08 08:37:47

    CopyFile.copyFile(new File("D:\\U盘\\imooc\\Hello.txt"),new File("D:\\U盘\\imooc\\Hello.txt"));

    第一个File是源文件,第二个File是copy之后生成的文件,在文件下面开始是没有的。

    至于为什么同一个文件copy时内容被删就不知道了。