专栏首页五毛程序员java实现文件夹(包括其中的子文件夹、子文件)的复制——递归

java实现文件夹(包括其中的子文件夹、子文件)的复制——递归

这是学校java课的一道实验题,题目如下:编程,根据指定的源和目标位置,完成指定文件或文件夹(包括其中的子文件夹、子文件)的复制。

以下是我的实现,使用了递归:

 1 package com.simon.myfinal;
 2 
 3 import java.io.File;
 4 import java.io.FileInputStream;
 5 import java.io.FileOutputStream;
 6 import java.io.InputStream;
 7 
 8 /**
 9  * Created by Rainmer on 2015/6/28.
10  */
11 public class FileCopy {
12     public static void main(String[] args) {
13         String oldPath = "D:/bower";
14         String newPath = "D:/bowerCopy";
15         File dirNew = new File(newPath);
16         dirNew.mkdirs();//可以在不存在的目录中创建文件夹
17         directory(oldPath, newPath);
18         System.out.println("复制文件夹成功");
19     }
20 
21     /**
22      * 复制单个文件
23      * @param oldPath 要复制的文件名
24      * @param newPath 目标文件名
25      */
26     public static void copyfile(String oldPath, String newPath) {
27         int hasRead = 0;
28         File oldFile = new File(oldPath);
29         if (oldFile.exists()) {
30             try {
31                 FileInputStream fis = new FileInputStream(oldFile);//读入原文件
32                 FileOutputStream fos = new FileOutputStream(newPath);
33                 byte[] buffer = new byte[1024];
34                 while ((hasRead = fis.read(buffer)) != -1) {//当文件没有读到结尾
35                     fos.write(buffer, 0, hasRead);//写文件
36                 }
37                 fis.close();
38             } catch (Exception e) {
39                 System.out.println("复制单个文件操作出错!");
40                 e.printStackTrace();
41             }
42         }
43     }
44 
45     /**
46      *
47      * @param oldPath 要复制的文件夹路径
48      * @param newPath 目标文件夹路径
49      */
50     public static void directory(String oldPath, String newPath) {
51         File f1 = new File(oldPath);
52         File[] files = f1.listFiles();//listFiles能够获取当前文件夹下的所有文件和文件夹
53         for (int i = 0; i < files.length; i++) {
54             if (files[i].isDirectory()) {
55                 File dirNew = new File(newPath + File.separator + files[i].getName());
56                 dirNew.mkdir();//在目标文件夹中创建文件夹
57                 //递归
58                 directory(oldPath + File.separator + files[i].getName(), newPath + File.separator + files[i].getName());
59             } else {
60                 String filePath = newPath + File.separator + files[i].getName();
61                 copyfile(files[i].getAbsolutePath(), filePath);
62             }
63 
64         }
65     }
66 }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • thymeltesys-基于Spring Boot Oauth2的扫码登录框架

    用户1737026
  • ViewPager实现广告自动轮播核心代码(Handler+Thread)

    用户1737026
  • 从0开始搭建自动部署环境

    用户1737026
  • 如何在 React Native 实现类微信小程序平台:WebView 调用原生组件

    在《我们是如何将 Cordova 应用嵌入到 React Native 中》 一文中,我们简单地介绍了『React Native 重写 Cordova 插件:复...

    Phodal
  • python笔记44-HTTP对外接口sign签名

    一般公司对外的接口都会用到sign签名,对不同的客户提供不同的apikey ,这样可以提高接口请求的安全性,避免被人抓包后乱请求。 sign签名是一种很常见的方...

    上海-悠悠
  • Google把百度当工具使,进行审查版搜索引擎的研发

    导读:上周 The Intercept 爆料谷歌计划在中国大陆重启其搜索业务,目前谷歌还没有对此传闻做出正面回应,而 9 日,The Intercept 又爆料...

    华章科技
  • 如何挂起Promise请求,refresh_token后再用新的access_token重新发起请求?

    接手老项目,需要写一个access_token刷新的逻辑,具体流程我就不赘述了,网上关于JWT刷新流程的文章有很多。我遇到的主要问题是,项目没有使用axios,...

    用户2141756
  • 汽车之家和易车重金投资的天天拍车会成超级平台吗?

    据统计,2018年半年不到,二手车电商行业累积融资已超过100亿,金额超过去年同期。本月初,优信二手车又传出赴美IPO的消息。

    罗超频道
  • dotnet core 打包构建提示 MSB3024 可能的原因

    在使用 dotnet publish -c release 在 Linux 服务器发布或使用 -r linux-x64 发布看到下面代码

    林德熙
  • 今日作业 -- 用js控制DIV的显示隐藏

    这个题很简单的,就是用一个按钮切换二个菜单的显示和隐藏。比昨晚的查找重复字符串要简单的多。 参与写作业的同学们基本都写的不错,思路也都OK,用原生JS,jQue...

    web前端教室

扫码关注云+社区

领取腾讯云代金券