如题
  • 注意,文件夹是不能拷贝的, 需要mkdir的
  • 文件选择合适的流进行拷贝
main测试方法
/**
* 主测试类,默认将D:\\base01 下的复制到D:\\base02
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub String originUrl;
String targetUrl; System.out.println("请输入源目录: "+"D:\\base01");
// originUrl = scanner.next();
originUrl = "D:\\base01";
System.out.println("请输入目标目录: "+"D:\\base02");
// targetUrl = scanner.next();
targetUrl = "D:\\base02"; System.out.println("正在将"+originUrl+"目录下全部文件复制到"+targetUrl+"........."); //Show Time , 先遍历,再逐个复制即可1
File beginDir = new File(originUrl);
File endDir = new File(targetUrl); //获取第一层目录, 遍历, 深度优先搜索
File[] childFileArr = beginDir.listFiles();
dfsDir(childFileArr,originUrl,targetUrl); System.out.println("复制成功--");
}
dfs复制方法
/**
* dfs复制,文件夹mkdir后进入递归,文件直接拷贝
* @param childFileArr
* @throws IOException
*/
public static void dfsDir(File[] childFileArr,String readerUrl,String writerUrl) throws IOException {
//遍历
for(File file : childFileArr) {
//计算到拷贝的目标文件夹名称
File targetDir = new File(writerUrl+"\\"+file.getName()); //判断
if(file.isDirectory()) {
//是文件夹需要先mkdir targetDir
if(!targetDir.exists()){
targetDir.mkdirs();
}
//文件夹dfs搜下去即可
dfsDir(file.listFiles(),file.getAbsolutePath(),targetDir.getAbsolutePath());
}
else {
//是文件进行复制
copyFileReaderWriter(file.getAbsolutePath(),targetDir.getAbsolutePath());
}
}
}
copyFileReaderWriter,文件的复制, 自行根据使用场景进行替换;比如音频不能用此字符流方法, 字符流多是用于文本复制

/**
* 根据Url进行文件的复制
* @param readerUrl 字符流输入流
* @param writerUrl 字符流输出流
* @throws IOException
*/
public static void copyFileReaderWriter(String readerUrl,String writerUrl) throws IOException {
Reader reader = new FileReader(readerUrl);
Writer writer = new FileWriter(writerUrl);
char[] arr = new char[5];
try {
int len=0;
while((len=reader.read(arr))!=-1) {
writer.write(new String(arr,0,len));
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
reader.close();
writer.close();
}
}
测试输出
请输入源目录: D:\base01
请输入目标目录: D:\base02
正在将D:\base01目录下全部文件复制到D:\base02.........
复制成功--
测试结果

运行成功,所有子文件夹及目录均已拷贝成功.

DFS遍历拷贝所有子文件夹及目录列表 (Java版)的更多相关文章

  1. matlab遍历文件夹下所有图片和遍历所有子文件夹下图片

    做图像处理实验,经常需要遍历当前文件下所有图片.matlab当然很早就考虑了这个问题,库函数dir就是完成这个工作的.函数返回的是一个存放所有目录下文件信息的结构体,通过遍历结构体就可以达到访问所有文 ...

  2. iOS国际化和genstrings所有子文件夹本地化字符串

    iOS国际化和genstrings所有子文件夹本地化字符串 在最近的一个繁忙的对外工程.每天加班.没有时间更新博客.简单谈一下知识的国际化. 首先,我们使用串.必须NSLocalizedString( ...

  3. java基础 File与递归练习 使用文件过滤器筛选将指定文件夹下的小于200K的小文件获取并打印按层次打印(包括所有子文件夹的文件) 多层文件夹情况统计文件和文件夹的数量 统计已知类型的数量 未知类型的数量

    package com.swift.kuozhan; import java.io.File; import java.io.FileFilter; /*使用文件过滤器筛选将指定文件夹下的小于200K ...

  4. iOS遍历程序内某个文件夹下所有文件的属性

    项目中有个文件管理系统,在做本地文件管理操作的时候,遇到了遍历本地文件的问题 遍历到的文件有些不需要显示,而且需要得到文件的相关属性,在此总结下. //查找需要遍历文件夹的目录 NSString *k ...

  5. java笔试题: ——将e:/source文件夹下的文件打个zip包后拷贝到f:/文件夹下面

    将e:/source文件夹下的文件打个zip包后拷贝到f:/文件夹下面 import java.io.*; import java.util.zip.ZipEntry; import java.uti ...

  6. C# 获得目录下所有文件或指定文件类型文件(包含所有子文件夹)

    public partial class FileGet { /// <summary> /// 私有变量 /// </summary> private static List ...

  7. [R语言]读取文件夹下所有子文件夹中的excel文件,并根据分类合并。

    解决的问题:需要读取某个大文件夹下所有子文件夹中的excel文件,并汇总,汇总文件中需要包含的2部分的信息:1.该条数据来源于哪个子文件夹:2.该条数据来源于哪个excel文件.最终,按照子文件夹单独 ...

  8. [No000073]C#直接删除指定目录下的所有文件及文件夹(保留目录)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  9. java基础 File 递归删除文件夹中所有文件文件夹 目录(包含子目录)下的.java文件复制到e:/abc文件夹中, 并统计java文件的个数

    File 递归删除文件夹中所有文件文件夹 package com.swift.kuozhan; import java.io.File; import java.util.Scanner; /*键盘录 ...

随机推荐

  1. kubernetes-subpath用法(把文件挂载在已存在的目录下,不覆盖原目录)

    以ngxin的配置文件为例子: nginx-deployment.yaml : apiVersion: v1 kind: ConfigMap metadata: name: nginx-cm data ...

  2. idea创建一个springboot项目

    第一种通过maven创建: 1.点击Create New Project 2.创建maven项目,选择jdk版本,点击next. 3.填写GroupId和ArtifactId,都是自定义的,然后点击n ...

  3. Inno Setup 检测已安装的.NET Framework 版本

    翻译自:http://kynosarges.org/DotNetVersion.html 由 Jordan Russell 写的 Inno Setup 是一个伟大的安装脚本程序,但缺乏一个内置的函数来 ...

  4. BZOJ5104 Fib数列 二次剩余、BSGS

    传送门 发现只有通项公式可以解决考虑通项公式 \(F_n = \frac{1}{\sqrt{5}}((\frac{1+\sqrt{5}}{2})^n - (\frac{1-\sqrt{5}}{2})^ ...

  5. python threading模块的Lock和RLock区别

    首先了解这两者是什么. 以下说明参考自python官网 Lock:Lock被称为①原始锁,原始锁是一个②在锁定时不属于特定线程的同步基元组件,它是能用的最低级的同步基元组件.原始锁处于 "锁 ...

  6. Thread-specific data(TSD)线程私有数据

    Thread-specific data(TSD)线程私有数据 http://blog.chinaunix.net/uid-26885237-id-3209913.html linux多线程编程中引入 ...

  7. jquery实现输入框实时统计字数和设置字数限制功能

    <html> <header> <meta charset="utf-8"> <title>测试实时字数显示</title&g ...

  8. ASPxClientGridView(客户端选择某一行的值的调用)

  9. js合并多个array

    Array.prototype.concat.call(array1, array2, array3, ...)

  10. 关于maven中版本控制问题

    之前我们说过Maven的版本分为快照和稳定版本,快照版本使用在开发的过程中,方便于团队内部交流学习.而所说的稳定版本,理想状态下是项目到了某个比较稳定的状态,这个稳定包含了源代码和构建都要稳定. ma ...