在Java中实现文件夹的拷贝(考虑子文件夹)

发布时间:2024年01月20日

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

文件拷贝分为两种情况:一种是在同一目录下进行文件拷贝,另一种是在不同目录下进行文件拷贝。对于第一种情况,我们只需要使用Java的文件输入输出流(FileInputStream和FileOutputStream)即可轻松实现;而对于第二种情况,我们还需要使用Java的文件类(File)来获取源文件和目标文件的路径信息。本篇文章主要就第二种情况进行操作。


提示:以下是本篇文章正文内容,下面案例可供参考

一、步骤

在D盘的aaa文件夹中创建一个多级文件夹bbb以及空文件夹ccc,将bbb文件夹中的文件拷贝到ccc中。

二、有关代码

1.引入库

代码如下:

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

2.创建数据源对象

代码如下:

File src = new File("D:\\aaa\\bbb");

3.创建目的地对象

代码如下:

File dest = new File("D:\\aaa\\ccc");

4.拷贝方法

注意点:拷贝需要以文件开始,文件结束。
先遍历数据源对象,以文件开始没有问题
*通过路径拼接的方法使目的地路径也变成文件
代码如下:

 private static void copydir(File src, File dest) throws IOException {
        dest.mkdirs();//创建文件
        //递归
        //1.进入数据源
        File[] files = src.listFiles();
        //2.遍历数组
        for (File file : files) {
            if(file.isFile()){
                //3.判断为文件,拷贝
                //细节:拷贝需要以文件开始,文件结束
                //要拷贝的文件
                FileInputStream fis = new FileInputStream(file);
                //文件的目的地
                FileOutputStream fos = new FileOutputStream(new File(dest,file.getName()));//重点,操作方法是进行路径的拼接
                byte[] bytes = new byte[1024];
                int len;
                while ((len = fis.read(bytes)) != -1){
                    fos.write(bytes,0,len);
                }
                fos.close();
                fis.close();
            }else {
                //4.判断为文件夹,递归
                copydir(file,new File(dest,file.getName()));
            }
        }
    }

三、完整代码

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class Text1 {
    public static void main(String[] args) throws IOException {
        //拷贝一个文件夹,考虑子文件夹

        //1.创建对象表示数据源
        File src = new File("D:\\aaa\\bbb");
        //2.创建对象表示目的地
        File dest = new File("D:\\aaa\\ccc");

        //3.调用方法进行拷贝
        copydir(src,dest);
    }
    /*
    * 作用:拷贝文件夹
    * 参数一:数据源
    * 参数二:目的地
    *
    * */
    private static void copydir(File src, File dest) throws IOException {
        dest.mkdirs();//创建文件
        //递归
        //1.进入数据源
        File[] files = src.listFiles();
        //2.遍历数组
        for (File file : files) {
            if(file.isFile()){
                //3.判断为文件,拷贝
                //细节:拷贝需要以文件开始,文件结束
                //要拷贝的文件
                FileInputStream fis = new FileInputStream(file);
                //文件的目的地
                FileOutputStream fos = new FileOutputStream(new File(dest,file.getName()));//重点,操作方法是进行路径的拼接
                byte[] bytes = new byte[1024];
                int len;
                while ((len = fis.read(bytes)) != -1){
                    fos.write(bytes,0,len);
                }
                fos.close();
                fis.close();
            }else {
                //4.判断为文件夹,递归
                copydir(file,new File(dest,file.getName()));
            }
        }
    }
}


总结

文件夹拷贝依然与利用遍历并判断多级文件夹中的文件的类似,使用递归思想,第一步进入数据源,第二步遍历数组,第三步对遍历到的进行判断,若是文件,进行题目要求的操作,如果不是,则继续进行递归。只是拷贝文件夹中要注意以文件开始,以文件结束,不能直接以文件夹为单位进行拷贝。

文章来源:https://blog.csdn.net/weixin_73644434/article/details/135708932
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。