有一个小需求:

在PC跟前没有人的时候,迅雷下载文件 至PC磁盘上,并且自动移动文件到U盘上,小主只要在走的时候取走U盘即可。

基于这个需求,有了下面这段代码:【JDK  1.8】

 1 package com.sxd.moveFile;
 2
 3 import java.io.BufferedReader;
 4 import java.io.BufferedWriter;
 5 import java.io.File;
 6 import java.io.FileOutputStream;
 7 import java.io.IOException;
 8 import java.nio.file.Path;
 9 import java.nio.file.Paths;
10 import java.nio.file.StandardWatchEventKinds;
11 import java.nio.file.WatchKey;
12 import java.nio.file.WatchService;
13 import java.util.concurrent.TimeUnit;
14
15 import org.junit.Test;
16
17 import com.google.common.io.Files;
18
19 /**
20  * 监听某个文件夹下--如果有新的文件出现 则移动文件到指定目录下
21  * @author Administrator
22  *
23  */
24 public class MoveFile implements Runnable{
25
26     public static String fileName = null;
27
28     @Test
29     public void test() throws IOException, InterruptedException{
30         moveFile();
31     }
32
33     public void moveFile() throws IOException, InterruptedException{
34
35
36             final Path path = Paths.get("E:/迅雷下载");
37             final WatchService watchService = path.getFileSystem().newWatchService();
38             path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE);//创建并启动监听 --创建文件的事件
39
40 //            final WatchKey watchKey = watchService.poll(20, TimeUnit.MINUTES);//poll()监听停止的条件--持续20分钟 20分钟后关闭监听
41             final WatchKey  watchKey = watchService.take();//take()等不到此类事件发生就一直运行
42
43             if(watchKey != null) {
44                 watchKey.pollEvents().stream().forEach(event ->
45                 {
46                     //执行本次 触发后的方法体
47                     System.out.println(event.context());System.out.println(event.kind().name());
48                     //仅 判断 新创建文件后缀为.rmvb的   才进行如下 操作
49                     if(event.context().toString().substring(event.context().toString().lastIndexOf(".")).equals(".rmvb")  || event.context().toString().substring(event.context().toString().lastIndexOf(".")).equals(".mkv")){
50                         fileName = event.context().toString();
51
52                         MoveFile mf = new MoveFile();
53                         Thread thread1 = new Thread(mf);//开启一个新的线程
54                         thread1.start();
55                     }
56                 });
57                 //再次执行
58                 try {
59                     moveFile();
60                 } catch (Exception e1) {
61                     e1.printStackTrace();
62                 }
63
64             }
65
66     }
67
68     @Override
69     public void run() {
70         try {
71             Files.copy(new File("E:/迅雷下载/"+fileName), new File("J:/U盘/迅雷下载/"+fileName));
72         } catch (Exception e) {
73             e.printStackTrace();
74         }
75     }
76 }

View Code

其中 关于文件系统注册的监听器上,有监听事件类型:

Overflow包含了文件的创建/删除/修改各种事件。

转载于:https://www.cnblogs.com/sxdcgaq8080/p/6214921.html

【监听文件 多线程】使用java--WatchService监听文件 开启多线程copy文件相关推荐

  1. java起socket监听,java socket 监听示例,javasocket,java socket监

    java socket 监听示例,javasocket,java socket监 java socket监听示例: socket监听需要使用SocketServer类,如下代码:package cn. ...

  2. java8 监控文件变化_[Java 8] (4) 列举目录下的所有文件和监视文件变化

    列举目录中的所有文件 首先给出代码: Files.list(Paths.get(".")).forEach(System.out::println); Files.list方法得到 ...

  3. java程序编译成exe文件_将java程序编译成独立运行的exe文件

    将java程序编译成独立运行的exe文件 众所周知java的程序可以"一次编译,到处运行",这个特性不错,但是实现这个特性的前提是当前的平台 必须有相应的jvm,而且如果当前平台的 ...

  4. java键盘监听延迟_解决JAVA键盘监听的延迟现象以及八个方向的运动

    首先解释一下键盘出现延迟的原因: 其实键盘为了用户体验,在按下一次按键之后,会有片刻的延迟,为什么会这样呢? 你想一下,当你打一个字母时,连着出来了好几个字母,你心里面的感受是怎么样的? 所以嘛,键盘 ...

  5. jmap 文件解析_[Java基础] 使用JMAP dump及分析dump文件

    http://zhumeng8337797.blog.163.com/blog/static/100768914201242410583187/ 其中jmap是java自带的工具 查看整个JVM内存状 ...

  6. JAVA file列出所有文件_用Java代码列出一个目录下所有的文件

    1.File类 File类在java.io.File包中,所以要导入这个包. File类中用到的方法: boolean isDirectory()       测试此抽象路径名表示的文件是否是个目录 ...

  7. java条件执行方法_java 开启多线程里面如何加条件判断执行其他逻辑?

    方法1:通过Thread类中的isAlive()方法判断线程是否处于活动状态. 线程启动后,只要没有运行完毕,都会返回true. [注]如果只是要等其他线程运行结束之后再继续操作,可以执行t.join ...

  8. java dat 解析_dat文件如何用java解析?

    用javamail解析邮件(失败 xiao__jia__jia3492018-11-03 如何用java输出Excel文件 wnk123456562012-07-19 Java发送邮件Excel附件名 ...

  9. java如何从https下载链接中下载文件

    java如何从https下载链接中下载文件 文章目录 java如何从https下载链接中下载文件 从https 下载文件会存在什么用的问题? 导入安全证书到jdk 下载文件 URL 获取inputSt ...

最新文章

  1. SpringBoot线程池的创建、@Async配置步骤及注意事项
  2. Activity的启动模式与flag详解
  3. python基于happybase对hbase增删改查-thrift1
  4. ORACLE SQL调优之执行计划与隐藏参数_complex_view_merging
  5. Uva 11400,照明系统设计
  6. 关于64位Linux配置android开发环境出现 No such file or directory
  7. 高可用 kubernetes 集群部署实践
  8. 平面设计学习社区,让你的作品展示出来
  9. Android开发笔记(一百三十七)自定义行为Behavior
  10. Linux 多进程学习
  11. linux每日命令(20):find命令概览
  12. python用matplotlib画雷达图_Matplotlib绘制雷达图和三维图的示例代码
  13. 安卓java模拟器按键精灵,安卓按键精灵实现后台
  14. 浅谈多元EI会议2019计算机音乐教育在民族音乐EI会议2019计算机传承中的作用
  15. directshow
  16. 程序员进阶必备--写文档
  17. chrome为默认浏览器时,解决ftp无法用windows资源管理器打开,而是跳转到chrome打开
  18. 奇点云数据中台技术汇(七) | 数据智能模型——数据中台航母的作战集群
  19. C和C++的二进制,八进制,十六进制输出格式(全面版)
  20. D3.js之折线图动画

热门文章

  1. 【原】jQuery easyUI 快速搭建前端框架
  2. xcodebuild -exportArchive -allowProvisioningUpdates
  3. .Net快速获取网络文本文件最后一段文字-小应用
  4. shopnc框架数据库查询限制30条记录
  5. 图论 - 寻找fly真迹
  6. Redis bind用法
  7. mini2440 uboot使用nfs方式引导内核,文件系统
  8. 腾讯通RTX发送文件出错的解决方法
  9. 强化学习的基础总结(一)
  10. Word 2013 打开时提示Windows installer窗口,然后安装失败