先说一下功能概要:
将文件或文件夹以关键字开头的名字复制到另一个目录下。
附加功能:定时检测源目录是否有新增文件或文件夹,并实时拷贝。

//拷贝文件/夹的方法public class CopyFolder {//是否是目标关键字文件夹private static boolean IS_AIM_FOLDER = false;/***          分析:*              A:封装数据源File*              B:封装数据目的地File*              C:判断该File是文件夹还是文件*                  a:是文件夹*                      就在目的地目录创建该文件夹*                      获取该File对象下的所有文件或者文件夹File对象 遍历得到每一个File对象*                      回到C*                  b:是文件*                      直接复制**/public static void main(String[] args) throws IOException {// 源路径File srcFile = new File("Z:\\AA\\A\\B\\C");// 目标路径File destFile = new File("Z:\\BB\\A\\B\\C");// 调用方法copyFolder(srcFile, destFile,destFile);}/*** 递归复制文件夹* @param srcFile* @param destFile* @param aimFile 仅提供对比* @throws IOException*/public static void copyFolder(File srcFile, File destFile,File aimFile) throws IOException {// 1.判断File对象是否是文件夹if (srcFile.isDirectory()) {//2.判断文件夹名称是否包含关键字if(srcFile.getName().startsWith("运营发送")|| IS_AIM_FOLDER){IS_AIM_FOLDER = true;//3.包含则复制当前文件夹的所有文件// 拼接新文件夹所在路径File newFolder = new File(destFile, srcFile.getName());// 创建文件夹newFolder.mkdir();// 遍历源路径下的所有File对象File[] fileArray = srcFile.listFiles();for (File file : fileArray) {// 递归调用copyFolder(file, newFolder, aimFile);}IS_AIM_FOLDER = false;}else{//4.不包含则向下遍历// 遍历源路径下的所有File对象File[] fileArray = srcFile.listFiles();for (File file : fileArray) {// 递归调用copyFolder(file, destFile,aimFile);}}} else {//5.判断是否属于关键字目录下的、是否包含关键字、是否还在当前文件夹的循环条件内、目标文件夹是否有改变。含任何一种条件都可复制if(srcFile.getName().startsWith("运营发送")||destFile.getName().startsWith("运营发送")|| IS_AIM_FOLDER ||!aimFile.equals(destFile) ){// 拼接新文件所在路径File newFile = new File(destFile, srcFile.getName());// 调用方法,复制文件copyFile(srcFile, newFile);}}}// 高效字节流一次读取一个字节数组复制文件public static void copyFile(File srcFile, File newFile) throws IOException, FileNotFoundException {// 数据源BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));// 目的位置BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(newFile));// 定义单次读取字节数组的大小,一般就写1024byte[] bys = new byte[1024];// read(byte[] bys)方法返回值为获取到的字节个数,若没有获取到,则返回-1int length = 0;while ((length = bis.read(bys)) != -1) {// write(byte[] bys,int off,int length)方法指的是从指定字节数组的指定位置开始写入(复制到)文件bos.write(bys, 0, length);}// 关闭输出流bos.close();// 关闭输入流bis.close();}
}

下面调用方法不能直接调上面的,需要将上面这段拷贝的代码main方法改成普通方法,然后将类注入,在下面定时检测时调用即可。

注意:下面的copyFolder.copyFunc(filePath,destFile)是调用的

//定时检测方法private static  String srcFile = "Z:\\AA\\A\\B\\C";private static  String destFile = "Z:\\BB\\A\\B\\C";//启动项目自动执行@PostConstructpublic String getFile() throws FileNotFoundException, IOException {final Timer timer = new Timer();String fileName1="";timer.schedule(new TimerTask() {public void run() {WatchKey key;try {WatchService watchService = FileSystems.getDefault().newWatchService();Paths.get(srcFile).register(watchService, StandardWatchEventKinds.ENTRY_CREATE);while (true) {File file = new File(srcFile);//path为监听文件夹File[] files = file.listFiles();key = watchService.take();//没有文件增加时,阻塞在这里for (WatchEvent<?> event : key.pollEvents()) {//获取到刚传的文件路径String filePath = srcFile + "\\" + event.context();
//                            if (fileName.startsWith("运营发送")){
//                                Thread.sleep(1000);//休眠一秒copyFolder.copyFunc(filePath,destFile);
//                            }}if (!key.reset()) {break; //中断循环}}} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}}, 2000, 3000);//第一个数字2000表示,2000ms以后开启定时器,第二个数字3000,表示3000ms后运行一次runreturn "";}

以上代码亲测可用。

按文件夹名匹配并复制文件夹及子文件相关推荐

  1. 知道文件扩展名,如何获得在系统中该文件类型的图标

    -----------------------   //  FAQ整理:ccrun(老妖)   //  2005.11.30   ----------------------- 请教:知道文件扩展名, ...

  2. os 修改文件夹 名_如何在OS X中更改文件夹和应用程序图标

    os 修改文件夹 名 One of the best ways to customize your Mac and make it your own is to change your app and ...

  3. 如何批量修改文件后缀名(包含该路径下的所有文件夹)

    1.批量修改某个文件夹目录下的所有文件的后缀名 方法非常简单,在该目录下,新建一个文本,此时文件后缀名是.txt.编辑该文本,文本内容为: ren *.ans *.out 此处的意思是将所有的.ans ...

  4. 保存时自动加分号_CAD自动保存文件扩展名是什么?如何快速恢复自动保存文件?...

    下面是本公众号文章分类目录,点击标题文字可打开分类文章列表: 安装卸载  异常.退出  文件及输入输出  基本操作技巧  各种设置及相关问题  界面和显示相关问题  快捷键  视图设置和调整  图层  ...

  5. u盘无法复制文件进去_U盘无法复制超过4GB的大文件怎么办?

    相信许多朋友经常通过U盘复制文件来转移数据,但可能会碰到下面的情况:U盘上明明还有大于4GB的空间,但只要复制超过4G大小的文件就提示文件太大而无法复制,是什么问题呢?该如何解决?下面IT技术资料分享 ...

  6. 编程小知识:文件扩展名的作用是什么?通俗易懂的文件扩展名详解

    介绍 文件扩展名(filename extension)也称为文件的后缀名,是操作系统用来标记文件类型的一种机制,在Windows系统下,扩展名还可以告诉操作系统默认用什么软件打开文件.通常来说,一个 ...

  7. 通过php获取文件后缀名怎么改,【转】PHP获取文件后缀名的几种方法

    在言会咸的博客转来的文章,还有三种,我以前用过第二种. //PHP获取文件后缀名的几种方法1: function get_file_type($filename){ $type = substr($f ...

  8. mysql文件扩展名查询_如何通过MySQL查询获取文件的文件扩展名?

    为了获得作为SQL查询结果的文件的文件扩展名,可以使用SUBSTRING_INDEX(). 语法如下select substring_index(yourColumnName,'.',-1) as a ...

  9. Android修改R文件包名程,以及批量修改导入R文件

    当我们创建Android工程时,R文件所在包名即初始创建的包名,当我们后期想修改R文件的包名时,其实只需要在 AndroidManifest.xml中将package的名字修改了保存即可, 或者通过 ...

最新文章

  1. openvswitch2.8.1 centos7.4 源码编译安装
  2. arm ubuntu 编译boost_为arm linux 交叉编译boost 1.33.1
  3. 重新认识:指向函数的指针
  4. 三角数数列与杨辉三角
  5. 将查询出来的数据按照一个字段分组且排序过程中,遇到的一些有关group的问题(分组排序应该使用partition by)
  6. 从零基础入门Tensorflow2.0 ----六、30 kaggle 10 monkeys 基础模型搭建与训练
  7. 高电压与绝缘技术方向,代做EMTP,ATP输电线路防雷仿真
  8. Edge使用Flash
  9. 关于绩效考核及绩效面谈
  10. 讯飞离线语音合成(语记)
  11. Vue本地项目实现其他局域网电脑在线访问
  12. 【vue】To install them, you can run: npm install --save aws-sdk module
  13. 计算机毕业设计论文不会做怎么办?这里送教程送代码送开题送答辩
  14. 深度学习框架智能时代的操作系统是什么?
  15. [无线连接手机]-通过局域网无线连接调试手机设备
  16. home assistant用esphome添加温湿度传感器
  17. 设置BottomSheetDialogFragment不可拖拽
  18. 百度局域网异常访问屏蔽策略破解方法
  19. 斯蒂芬·沃尔夫勒姆:宇宙的本质是计算
  20. 一张纸一直对折,按顺序打印

热门文章

  1. ML之NB:基于news新闻文本数据集利用纯统计法、kNN、朴素贝叶斯(高斯/多元伯努利/多项式)、线性判别分析LDA、感知器等算法实现文本分类预测
  2. 分享几款手写有趣的html5网页小游戏
  3. 浅谈机器学习中的过拟合
  4. 土壤湿度指标(Soil wetness index,SWI)
  5. 如何快速提高英飞凌单片机编译器 TASKING TriCore Eclipse IDE 编译速度
  6. JAVA API系统变量名一些缩写
  7. 关于麦克风的参数介绍 - 驻极体麦克风(ECM)和硅麦(MEMS)
  8. 机器学习入门之GBDT
  9. [纯理论] FPN (Feature Pyramid Network)
  10. 计算机系统如何恢复出厂设置路由器,路由器恢复出厂设置的具体操作步骤-电脑自学网...