Java的IO流实现文件和文件夹的复制

 更新时间:2022年06月23日 15:00:16   作者:浅尐墨〆  
这篇文章主要为大家详细介绍了Java的IO流实现文件和文件夹的复制,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Java的IO流实现文件和文件夹复制的具体代码,供大家参考,具体内容如下

1、使用文件流对单个文件进行复制

将某个文件复制到指定的路径下:

//复制文件
public static void copy(File f1, String path) throws IOException {
        System.out.println("***copy***" + f1.getName());
        FileInputStream in = new FileInputStream(f1);
        FileOutputStream out = new FileOutputStream(path + f1.getName());
        byte[] bytes = new byte[512];
        while ((in.read(bytes)) != -1) {
            out.write(bytes, 0, bytes.length);
        }
        out.close();
        in.close();
    }

2、使用文件流将文件及文件夹下的文件进行复制

将a文件夹下的文件拷贝到b文件夹里。a和b文件夹可能存在相同文件,若b文件夹下已经存在a文件夹中的文件则不拷贝,若不存在则拷贝。

(1)递归复制文件夹下的文件

public static void copyAll(File A, File B) throws IOException {
        boolean flag = true;
        if (!B.exists()) {
            B.mkdir();
        }
        String[] a=A.list();
        //遍历A中所有文件及文件夹
        for (int i = 0; i < a.length; i++) {
            System.out.println("a:"+a[i]);
            //若A中含有文件夹
            if (new File(A.getPath()+"/"+a[i]).isDirectory()) {
                File newFolder=null;
                if (! ( new File(B.getPath()+"/"+a[i]).exists() )) {
                    newFolder = new File(B, a[i]);
                    newFolder.mkdir(); //创建子文件夹
                }
                //递归,判断
                copyAll(new File(A.getPath()+"/"+a[i]), newFolder);
            }
            //若A中含有文件,直接复制文件
            else {
                copyOtherFile(new File(A.getPath()+"/"+a[i]), B);
            }            
        }
        
    }

(2)若含有同名文件,则不进行复制

public static void copyOtherFile(File srcfile, File destfile) throws IOException {
        File[] destlist = destfile.listFiles();
        boolean flag = true;
            flag = true;
            for (File f2 : destlist) {
                System.out.println("f:" + srcfile.getName());
                System.out.println("f2:" + f2.getName());
                //含有同名文件,不进行复制
                if (srcfile.getName().equals(f2.getName())) {
                    System.out.println("相同");
                    flag = false;
                    break;
                } else {
                    System.out.println("不相同");
                }
            }
            if (flag) {
                copy(srcfile, destfile.getPath() + "/");
            }
        
    }

(3)主函数调用

public static void main(String[] args) throws IOException {
        File file = new File("F:/a");
        File file2 = new File("F:/b");
        copyAll(file, file2);
        System.out.println("复制成功!!!");
    }

下一篇:Java实现文件及文件夹的删除

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

相关文章

  • eclipse如何运行springboot项目

    eclipse如何运行springboot项目

    这篇文章主要介绍了eclipse如何运行springboot项目问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-05-05
  • Spring Boot中使用@Scheduled和Quartz实现定时任务的详细过程

    Spring Boot中使用@Scheduled和Quartz实现定时任务的详细过程

    Spring Boot提供了两种常见的定时任务实现方式,一种是基于@Scheduled注解的简单定时任务,另一种是功能更强大的Quartz框架,本文将介绍如何在Spring Boot中使用这两种方式实现定时任务和调度功能,感兴趣的朋友一起看看吧
    2025-08-08
  • Spring注解之@Import的简单介绍

    Spring注解之@Import的简单介绍

    @Import是Spring基于Java注解配置的主要组成部分,下面这篇文章主要给大家介绍了关于Spring注解之@Import的简单介绍,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • Jetpack Room 使用示例详解

    Jetpack Room 使用示例详解

    Room 是 Android 开发中强大的持久化解决方案,它简化了 SQLite 的使用,提供了类型安全的数据库访问,并与 Android 架构组件深度集成,本文给大家介绍Jetpack Room 使用详解,感兴趣的朋友一起看看吧
    2025-04-04
  • 详谈ThreadLocal-单例模式下高并发线程安全

    详谈ThreadLocal-单例模式下高并发线程安全

    这篇文章主要介绍了ThreadLocal-单例模式下高并发线程安全,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • Spring Boot 单元测试和集成测试实现详解

    Spring Boot 单元测试和集成测试实现详解

    这篇文章主要介绍了Spring Boot 单元测试和集成测试实现详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • IDEA的常见的设置和优化功能图文详解

    IDEA的常见的设置和优化功能图文详解

    这篇文章主要介绍了IDEA的常见的设置和优化功能,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • spring-kafka使消费者动态订阅新增的topic问题

    spring-kafka使消费者动态订阅新增的topic问题

    这篇文章主要介绍了spring-kafka使消费者动态订阅新增的topic问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • Netty学习之理解selector原理示例

    Netty学习之理解selector原理示例

    这篇文章主要为大家介绍了Netty学习之理解selector原理示例使用分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪<BR>
    2023-07-07
  • Java 语言实现清除带 html 标签的内容方法

    Java 语言实现清除带 html 标签的内容方法

    下面小编就为大家带来一篇Java 语言实现清除带 html 标签的内容方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02

最新评论