当前位置: 首页 > news >正文

Java递归拷贝文件夹

拷贝文件或文件夹

/**
 * 拷贝文件
 *
 * @param source    源文件
 * @param target    目标文件
 */
public void copyFile(String source, String target) {
    // 源文件
    File sourceFile = new File(source);
    if (!sourceFile.exists()) {
        return;
    }

    // 目标文件
    File targetFile = new File(target);

    // 文件拷贝
    if (sourceFile.isFile()) {
        copyFromChanel(sourceFile, targetFile);
        return;
    }

    // 文件夹拷贝
    if (!targetFile.exists()) {
        targetFile.mkdirs();
    }
    for (File file: sourceFile.listFiles()) {
        copyFile(file.getAbsolutePath(), target + File.separator + file.getName());
    }

}
复制代码

利用文件管道拷贝文件

/**
 * 利用文件管道拷贝文件
 *
 * @param source    源文件
 * @param target    目标文件
 */
public void copyFromChanel(File source, File target) {

    // 文件流
    FileInputStream fis = null;
    FileOutputStream fos = null;

    // 文件管道
    FileChannel fci = null;
    FileChannel fco = null;
    try {

        // 文件流
        fis = new FileInputStream(source);
        fos = new FileOutputStream(target);

        // 文件管道
        fci = fis.getChannel();
        fco = fos.getChannel();

        // 连接两个通道,并且从fci通道读取,然后写入fco通道
        fci.transferTo(0, fci.size(), fco);

    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (fis != null) fis.close();
            if (fci != null) fci.close();
            if (fos != null) fos.close();
            if (fco != null) fco.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}复制代码


相关文章:

  • SSH.ASDM:远程管理
  • Adapter.notifyDataSetChanged与ListView.Post()刷新问题
  • SpringBoot几种定时任务的实现方式
  • Linux文件权限命令及配置
  • java判断集合list是为空
  • 升级的Electric Cloud平台增添了大型机和微服务功能
  • day16-示例:表单验证
  • c语言程序设计第6周编程作业一(分解质因数)
  • 将任意程序添加进右键菜单方法
  • 技术分享连载(二十四)
  • 序列化Serializable和Parcelable的理解和区别
  • vue-router的history模式发布配置
  • HTML-坦克大战-完成子弹连发功能(三)
  • ES6 之关键字 const
  • [转] 学会fetch的用法
  • 【108天】Java——《Head First Java》笔记(第1-4章)
  • ComponentOne 2017 V2版本正式发布
  • ES6系列(二)变量的解构赋值
  • golang 发送GET和POST示例
  • HTTP中GET与POST的区别 99%的错误认识
  • IOS评论框不贴底(ios12新bug)
  • java多线程
  • JS变量作用域
  • oldjun 检测网站的经验
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • React-redux的原理以及使用
  • session共享问题解决方案
  • SpringBoot几种定时任务的实现方式
  • underscore源码剖析之整体架构
  • Vue小说阅读器(仿追书神器)
  • 技术:超级实用的电脑小技巧
  • 目录与文件属性:编写ls
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 首页查询功能的一次实现过程
  • 数据科学 第 3 章 11 字符串处理
  • 微信开源mars源码分析1—上层samples分析
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • (bean配置类的注解开发)学习Spring的第十三天
  • (day 12)JavaScript学习笔记(数组3)
  • (分享)自己整理的一些简单awk实用语句
  • (附源码)ssm学生管理系统 毕业设计 141543
  • (力扣)1314.矩阵区域和
  • (算法)前K大的和
  • (万字长文)Spring的核心知识尽揽其中
  • (转)项目管理杂谈-我所期望的新人
  • .a文件和.so文件
  • .NET 8 编写 LiteDB vs SQLite 数据库 CRUD 接口性能测试(准备篇)
  • .NET Core跨平台微服务学习资源
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .NET 反射 Reflect
  • .net打印*三角形
  • @Autowired和@Resource装配
  • @javax.ws.rs Webservice注解
  • @SentinelResource详解
  • @Transient注解