本文实例为大家分享了java实现系统多级文件夹复制的具体代码,供大家参考,具体内容如下

package com.jae;

import java.io.*;

//复制文件夹内的内容,包含多级文件夹
public class test2 {
    public static void main(string[] args) throws exception {
        //原文件夹地址
        file respath = new file("e:\\java\\分享");
        file destpath = new file("e:\\");
        //method(respath, destpath);
        copy(respath, destpath);
    }
    public static void copy(file src,file dest) throws exception {
        file newdir = new file(dest,src.getname());
        newdir.mkdir();
        file[] subfiles = src.listfiles();
        for (file subfile : subfiles) {
            if(subfile.isfile()){
                bufferedinputstream bis = new bufferedinputstream(new fileinputstream(subfile));
                bufferedoutputstream bos =
                        new bufferedoutputstream(
                                new fileoutputstream(
                                        new file(newdir,subfile.getname())));
                int b;
                byte[] bytes = new byte[1024 * 8];
                while((b = bis.read(bytes)) != -1){
                    bos.write(bytes,0,b);
                }
                bis.close();
                bos.close();
            }else{
                copy(subfile,newdir);//递归调用
            }

        }
    }
    public static void method(file dir, file destpath) throws ioexception {
        //获取源路径的文件
        file[] files = dir.listfiles();
        //根目录文件夹名
        string name1 = dir.getname();
        //遍历源路径的文件
        for (file file : files) {
            if (file.isfile()) {

                stringbuilder sb = new stringbuilder(destpath.getabsolutepath());
                sb.append("\\").append(file.getname());
                //获取盘符后面的路径和文件名
                //string s = absolutepath.split(":")[1];

                //创建输入流,封装获取到的文件的绝对路径
                fileinputstream fis = new fileinputstream(file.getabsolutepath());
                //目标路径,定义目标路径的盘符,和要复制的文件路径和文件名
                //fileoutputstream fos = new fileoutputstream("f:" + s);
                fileoutputstream fos = new fileoutputstream(sb.tostring());

                //复制文件操作
                int len;
                byte[] bytes = new byte[1024 * 8];
                while ((len = fis.read(bytes)) != -1) {
                    fos.write(bytes, 0, len);
                    fos.flush();
                }

                fos.close();
                fis.close();
            } else {

                stringbuilder sb = new stringbuilder(destpath.getabsolutepath());
                sb.append("\\").append(name1).append("\\").append(file.getname());

                /*string name1 = file.getname();
                //获取文件夹的路径
                string name = file.getpath();
                //获取盘符:后的文件夹路径
                string s = name.split(":")[1];*/
                //创建文件夹路径
                //file file1 = new file("f:" + name1);
                file file1 = new file(sb.tostring());
                file1.mkdirs();
                //system.out.println(name);
                method(file, file1);
            }
        }
    }
}

再为大家补充一段代码:java递归复制多级目录及文件,感谢原作者的分享

import java.io.bufferedinputstream;
import java.io.bufferedoutputstream;
import java.io.file;
import java.io.fileinputstream;
import java.io.fileoutputstream;
import java.io.ioexception;
/*
 * 需求:复制多级文件夹
 * 
 * 数据源:d:\
 * 目的地:f:\\新建文件夹
 * 
 * 分析:
 *      a:封装数据源file
 *      b:封装目的地file
 *      c:判断该file是文件夹还是文件
 *          a:是文件夹
 *              就在目的地目录下创建该文件夹
 *              获取该file对象下的所有文件或者文件夹file对象
 *              遍历得到每一个file对象
 *              回到c
 *          b:是文件
 *              就复制(字节流)
 */


public class c1 {
public static void main(string[] args) throws ioexception {
    file srcfolder = new file("d:\");
    file dstfolder = new file("f:\\新建文件夹");
    judge(srcfolder,dstfolder);
}

private static void judge(file srcfolder,file dstfolder) throws ioexception {
    if(srcfolder.isdirectory()){
        file newfolder = new file(dstfolder,srcfolder.getname());
        newfolder.mkdir();

        file[] filearr = srcfolder.listfiles();
        for(file f:filearr){
            judge(f, newfolder);

        }
    }else{
        file newfile = new file(dstfolder,srcfolder.getname());
//      system.out.println(newfile);
        copyfile(srcfolder,newfile);

    }

}

private static void copyfile(file srcfolder, file newfile) throws ioexception {
    // todo auto-generated method stub

    bufferedinputstream bis = new bufferedinputstream(new fileinputstream(
            srcfolder));
    bufferedoutputstream bos = new bufferedoutputstream(
            new fileoutputstream(newfile));

    byte[] bys = new byte[1024];
    int len = 0;
    while ((len = bis.read(bys)) != -1) {
        bos.write(bys, 0, len);

    }

    bos.close();
    bis.close();
}


}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持www.887551.com。