首页 > 其他 > 详细

用FileInputStream和FileOutputStream实现文件复制粘贴

时间:2016-01-27 11:00:50      阅读:270      评论:0      收藏:0      [点我收藏+]

定义一个方法

参数:

srcFile:被复制的文件

destFile:通过复制得到的新文件

public static void copyFile(File srcFile, File destFile) throws IOException{
    if(!srcFile.exists()){ 
        throw new IllegalArgumentException("文件:"+ srcFile +"不存在!"); 
    }    if(!srcFile.isFile()){ 
        throw new IllegalArgumentException(srcFile +"不是文件!"); 
    }

    以上判断文件是否存在及是否为目录

   FileInputStream fis = new FileInputStream(srcFile);  //相当于复制文件
   FileOutputStream fos = new FileOutputStream(destFile); //相当于粘贴文件


定义缓冲区(二选一):

1.批量读取方式:  

byte[] buf = new byte[8*1024];     //定义一个作为缓冲的byte数组

2.单字节读取方式:

 int c;   //定义一个作为缓冲的int对象


读取并写入数据(二选一):
1.批量读取:

    while((fis.read(buf, 0, buf.length)) != -1){        
        for (byte b : buf) { 
            fos.write(b);    //将读到的字节逐个写入文件   
        } 
        fos.flush();    //刷新缓冲区,不刷新也没关系,但因为有缓冲区,所以最好加上
   }

2.单字节读取:

    while((c = fis.read()) != -1){
        fos.write(c);    //将读到的字节逐个写入文件
        fos.flush();    //刷新缓冲区,不刷新也没关系,因为没有缓冲区
    }


关闭流:

    fis.close();        //关闭文件输入流
    fos.close();        //关闭文件输出流
 }

注意:

  1. 使用逐个字节读取方式,不带缓冲区。这种方式最慢。

  2. 使用批量字节读取方式。通过定义合理的作为缓冲的byte数组大小,可以达到与BufferxxxStream方法相同甚至高出的效率。


代码参考自:http://www.imooc.com/上的课程

本文出自 “个人笔记” 博客,请务必保留此出处http://mobileself.blog.51cto.com/4350932/1738730

用FileInputStream和FileOutputStream实现文件复制粘贴

原文:http://mobileself.blog.51cto.com/4350932/1738730

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!