在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复制文件的4种方式

java复制文件的几种方式

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

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

java 文件/文件夹 从一个路径拷贝到另一个路径

只是简单地写了两个函数,第一个函数是将一个文件从oldpath copy到newpath. 拷贝文件夹调用了拷贝文件的方法,将文件夹中的每一个文件依次拷贝过去,具体的代码如下: 从下面的代码中...

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

package com.cnblogs.zxub.upload; import java.io.File; import java.io.FileInputStream; import java.i...

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

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

复制一个目录下的所有文件到另外一个目录(Java实现)

首先说说我的思路, 要复制一个目录下的所有文件到另外的一个目录下,我们不知道目录下的结构是怎么样的,也不知道目录有多少层,文件有多少个,这样我们会想用循环,for! 但是我们不知道有多少层,所以循环不...

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

首先我们来分析一下: /*  *   * 需求:复制多级文件夹  * 数据源:  * 目的地:  *   * 分析  * A:封装数据源、  * B:封装目的地  * C:判断该File是文件还...

java遍历文件夹并将文件夹里的所有文件同样的复制到另一个文件中

package fileutil; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; im...

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

import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; public class ...

java文件和文件夹复制、删除、移动操作

import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在java中高效复制一个文件夹里面所有的内容
举报原因:
原因补充:

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