欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java实现系统多级文件夹复制

程序员文章站 2022-07-06 14:47:08
本文实例为大家分享了java实现系统多级文件夹复制的具体代码,供大家参考,具体内容如下package com.jae;import java.io.*;//复制文件夹内的内容,包含多级文件夹publi...

本文实例为大家分享了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:\\1
 * 目的地: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:\\1");
    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();
}


}

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