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

定义一个方法

参数:

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/上的课程

你可能感兴趣的:(java,字节流)