在java中高效复制一个文件夹里面所有的内容

原创 2015年11月21日 09:42:39

在接的一个外包项目里面:有一个二维码扫描仪的二次开发的项目,在这里面有个问题就是需要将一个比较大的文件夹里面的所有内容复制到另外一个文件夹中,由于文件夹里面的内容还比较多,所以需要一点高效的方法。

当然传统的方法是按照字节去复制一个可以直接copy的文件,这样的速度还是挺慢的,对于我们那个200M的文件,大概需要2min的时间,这个有点长,公司那边希望时间短点,所以看到一个比较高效的方法,留着以后。。。

先看下传统的方法:利用字节流直接复制

public static void copy(File[] fl, File file) {
    if (!file.exists()) // 如果文件夹不存在
        file.mkdir(); // 建立新的文件夹
    for (int i = 0; i < fl.length; i++) {
        if (fl[i].isFile()) { // 如果是文件类型就复制文件
            try {
                FileInputStream fis = new FileInputStream(fl[i]);
                FileOutputStream out = new FileOutputStream(new File(file
                        .getPath()
                        + File.separator + fl[i].getName()));
               
                int count = fis.available();
                byte[] data = new byte[count];
                if ((fis.read(data)) != -1) {
                    out.write(data); // 复制文件内容
                }
                out.close(); // 关闭输出流
                fis.close(); // 关闭输入流
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        if (fl[i].isDirectory()) { // 如果是文件夹类型
            File des = new File(file.getPath() + File.separator
                    + fl[i].getName());
            des.mkdir(); // 在目标文件夹中创建相同的文件夹
            copy(fl[i].listFiles(), des); // 递归调用方法本身
        }
    }
(f1输入文件夹,file是输出文件夹)

看看比较高效的方法,利用文件通道(FileChannel)来实现,可以节省1/3的时间。

看看代码:(这是文件的复制)

public void fileChannelCopy(File s, File t) {

        FileInputStream fi = null;

        FileOutputStream fo = null;

        FileChannel in = null;

        FileChannel out = null;

        try {

            fi = new FileInputStream(s);

            fo = new FileOutputStream(t);

            in = fi.getChannel();//得到对应的文件通道

            out = fo.getChannel();//得到对应的文件通道

            in.transferTo(0, in.size(), out);//连接两个通道,并且从in通道读取,然后写入out通道

        } catch (IOException e) {

            e.printStackTrace();

        } finally {

            try {

                fi.close();

                in.close();

                fo.close();

                out.close();

            } catch (IOException e) {

                e.printStackTrace();

            }

        }

    }
如果想要文件夹的复制,那就还需要递归调用一下。

Java中实现复制文件或文件夹

Java中实现复制文件或文件夹     拷贝一个文件的算法比较简单,当然,可以对它进行优化,比如使用缓冲流,提高读写数据的效率等。但是在复制文件夹时,则需要利用Flie类在目标文件夹中创建相应的目录,...
  • Dream_JavaWorld
  • Dream_JavaWorld
  • 2009年01月02日 10:50
  • 29723

java实现将一个文件夹的所有文件拷贝到另一个文件夹

FileInputStream和FileOutputStream类: 代码: package Chapter16; import java.io.File; import java.io...
  • tan313
  • tan313
  • 2014年11月06日 10:29
  • 3815

java中递归实现复制多级文件夹

首先我们来分析一下: /*  *   * 需求:复制多级文件夹  * 数据源:  * 目的地:  *   * 分析  * A:封装数据源、  * B:封装目的地  * C:判断该File是文件还...
  • YQlakers
  • YQlakers
  • 2017年04月06日 19:52
  • 1361

java复制文件的4种方式

java复制文件的几种方式
  • u014263388
  • u014263388
  • 2016年08月02日 22:38
  • 15703

java 文件复制 文件夹复制工具类

自己写的工具类,有不对的地方或者可以优化的地方,希望留言,共同讨论
  • lakelise
  • lakelise
  • 2016年07月13日 17:44
  • 373

java---复制整个文件夹所有内容

import java.io.*; public class CopyFile {     public static void copy(File[] fl, File file) {  ...
  • apxar
  • apxar
  • 2012年08月17日 21:32
  • 4309

Java实现文件或文件夹的复制到指定目录

import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; public class ...
  • qq_22672291
  • qq_22672291
  • 2017年03月29日 14:01
  • 3948

用java实现的文件和文件夹拷贝和转移

package com.cnblogs.zxub.upload; import java.io.File; import java.io.FileInputStream; import java.i...
  • xuweilinjijis
  • xuweilinjijis
  • 2013年03月18日 14:59
  • 11763

java复制文件到指定目录

数据采集过程中,将数据分别采集到了两个电脑中,需要将两个文件放入一个文件夹中,因此,需要写一个复制目标文件到指定文件夹的代码,于是开始了撸代码过程。 开始时候,想偷懒,copy个程序改改就这样吧,于是...
  • he_min
  • he_min
  • 2016年11月07日 10:38
  • 5695

Java 复制文件和文件夹

前言          欢迎大家我分享和推荐好用的代码段~~ 声明          欢迎转载,但请保留文章原始出处:          CSDN:http://www.csdn.net  ...
  • luckkof
  • luckkof
  • 2014年03月05日 10:22
  • 794
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在java中高效复制一个文件夹里面所有的内容
举报原因:
原因补充:

(最多只允许输入30个字)