Java教程

Java案例——复制单级\多级文件夹

本文主要是介绍Java案例——复制单级\多级文件夹,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一、复制单级文件夹

需求:将"E:\Demo"文件夹复制到F盘下

分析:

1、创建数据源目录File,路径为"E:\Demo"

2、获取数据源目录File对象的名称也就是文件夹的名称

3、创建目的地目录File对象,路径名是要复制到的盘F:+将要复制到的文件名称(这里与原文件保持一致)

4、判断目的地目录对应的File是否存在,不存在就直接创建

5、获取数据源目录下的所有文件的File数组

6、遍历数组,得到每一个File对象,就是数据源文件

7、获取数据源文件File对象的名称

8、创建目的地文件File对象,路径名是目的地目录+名称

9、复制文件,由于文件类型不确定,采用字节流复制文件

/*
* 1、创建数据目录File,路径为"E:\\Demo"
2、获取数据源目录File对象的名称也就是文件夹的名称
3、创建目的地目录File对象,路径名是要复制到的盘F:+将要复制到的文件名称(这里与原文件保持一致)
4、判断目的地目录对应的File是否存在,不存在就直接创建
5、获取数据源目录下的所有文件的File数组
6、遍历数组,得到每一个File对象,就是数据源文件
7、获取数据源文件File对象的名称
8、创建目的地文件File对象,路径名是目的地目录+名称
9、复制文件,由于文件类型不确定,采用字节流复制文件
* */
public class Demo01 {
    public static void main(String[] args) throws IOException {
        //创建数据目录File,路径为"E:\\Demo"
        File srcFolder = new File("E:\\Demo");
        //获取数据源目录File对象的名称也就是文件夹的名称
        String srcFolderName = srcFolder.getName();
        //创建目的地目录File对象,路径名是要复制到的盘F:+将要复制到的文件名称(这里与原文件保持一致)
        File destFolder = new File("F:", srcFolderName);
        //判断目的地目录对应的File是否存在,不存在就直接创建
        if (!destFolder.exists()) {
            destFolder.mkdir();
        } else {
            System.out.println("文件名已存在,请修改目录名后再次运行");
        }
        //获取数据源目录下的所有文件的File数组
        File[] listfiles = srcFolder.listFiles();
        //遍历数组,得到每一个File对象,就是数据源文件
        for (File srcfile : listfiles) {
            //获取数据源文件File对象的名称
            String srcfileName = srcfile.getName();
            //创建目的地文件File对象,路径名是目的地目录+名称
            File destfile = new File(destFolder, srcfileName);
            //复制文件,由于文件类型不确定,采用字节流复制文件
            //调用方法
            copyFile(srcfile, destfile);
​
        }
​
​
    }
​

二、复制多级文件夹

需求:把"E:\Demo"复制到F盘下,Demo中含有多个文件夹,文件夹中又有多个子文件夹

分析:

1、创建数据源对象,路径是"E:\Demo"

2、创建目的地File对象,路径是F:\

3、写方法实现文件夹的复制,参数为数据源File对象和目的地File对象(用到递归)

4、判断数据源File是否是目录

是:

A:在目的地下创建和数据源File名称一样的目录

B:获取数据源File下所有的文件或者目录的File数组

C:遍历该File数组,得到每一个File对象

D:把该File作为数据源File对象,递归调用复制文件夹的方法

不是:

表明是文件,直接用字节流复制

package Demo041102;
​
import java.io.*;
​
/*
*1、创建数据源对象,路径是"E:\\Demo"
2、创建目的地File对象,路径是F:\\
3、写方法实现文件夹的复制,参数为数据源File对象和目的地File对象(用到递归)
4、判断数据源File是否是目录
是:
A:在目的地下创建和数据源File名称一样的目录
B:获取数据源File下所有的文件或者目录的File数组
C:遍历该File数组,得到每一个File对象
D:把该File作为数据源File对象,递归调用复制文件夹的方法
不是:
表明是文件,直接用字节流复制
* */
public class Demo02 {
    public static void main(String[] args) throws IOException {
        //创建数据源对象,路径是"E:\\Demo"
        File srcFile=new File("E:\\Demo");
        //创建目的地File对象,路径是F:\\
        File destFile=new File("F:\\");
        //写方法实现文件夹的复制,参数为数据源File对象和目的地File对象(用到递归)
        copyFolder(srcFile,destFile);
​
    }
    //复制文件夹
    private static void copyFolder(File srcFile, File destFile) throws IOException {
        //判断数据源File是否是目录
        if (srcFile.isDirectory()){
            //在目的地下创建和数据源File名称一样的目录
            String srcFileName = srcFile.getName();
            File newFolder=new File(destFile,srcFileName);
            if (!newFolder.exists()){
                newFolder.mkdir();
            }
            //获取数据源File下所有的文件或者目录的File数组
            File [] files= srcFile.listFiles();
            //遍历该File数组,得到每一个File对象
            for (File file:files){
                //把该File作为数据源File对象,递归调用复制文件夹的方法
                copyFolder(srcFile,newFolder);
            }
​
        }else{
            File newFile=new File(destFile,srcFile.getName());
            copyFile(srcFile,newFile);
        }
    }
​
    private static void copyFile(File srcfile, File destfile) throws IOException {
        //创建字节缓冲输入输出流
        BufferedInputStream bips = new BufferedInputStream(new FileInputStream(srcfile));
        BufferedOutputStream bops = new BufferedOutputStream(new FileOutputStream(destfile));
        //读取数据
        byte[] bytes = new byte[1024];
        int len;
        while ((len = bips.read(bytes)) != -1) {
            bops.write(bytes, 0, len);
​
        }
        bips.close();
        bops.close();
    }
}
​

 

这篇关于Java案例——复制单级\多级文件夹的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!