【监听文件 多线程】使用java--WatchService监听文件 开启多线程copy文件
有一个小需求:
在PC跟前没有人的时候,迅雷下载文件 至PC磁盘上,并且自动移动文件到U盘上,小主只要在走的时候取走U盘即可。
基于这个需求,有了下面这段代码:【JDK 1.8】
![](/assets/blank.gif)
![](/assets/blank.gif)
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文件相关推荐
- java起socket监听,java socket 监听示例,javasocket,java socket监
java socket 监听示例,javasocket,java socket监 java socket监听示例: socket监听需要使用SocketServer类,如下代码:package cn. ...
- java8 监控文件变化_[Java 8] (4) 列举目录下的所有文件和监视文件变化
列举目录中的所有文件 首先给出代码: Files.list(Paths.get(".")).forEach(System.out::println); Files.list方法得到 ...
- java程序编译成exe文件_将java程序编译成独立运行的exe文件
将java程序编译成独立运行的exe文件 众所周知java的程序可以"一次编译,到处运行",这个特性不错,但是实现这个特性的前提是当前的平台 必须有相应的jvm,而且如果当前平台的 ...
- java键盘监听延迟_解决JAVA键盘监听的延迟现象以及八个方向的运动
首先解释一下键盘出现延迟的原因: 其实键盘为了用户体验,在按下一次按键之后,会有片刻的延迟,为什么会这样呢? 你想一下,当你打一个字母时,连着出来了好几个字母,你心里面的感受是怎么样的? 所以嘛,键盘 ...
- jmap 文件解析_[Java基础] 使用JMAP dump及分析dump文件
http://zhumeng8337797.blog.163.com/blog/static/100768914201242410583187/ 其中jmap是java自带的工具 查看整个JVM内存状 ...
- JAVA file列出所有文件_用Java代码列出一个目录下所有的文件
1.File类 File类在java.io.File包中,所以要导入这个包. File类中用到的方法: boolean isDirectory() 测试此抽象路径名表示的文件是否是个目录 ...
- java条件执行方法_java 开启多线程里面如何加条件判断执行其他逻辑?
方法1:通过Thread类中的isAlive()方法判断线程是否处于活动状态. 线程启动后,只要没有运行完毕,都会返回true. [注]如果只是要等其他线程运行结束之后再继续操作,可以执行t.join ...
- java dat 解析_dat文件如何用java解析?
用javamail解析邮件(失败 xiao__jia__jia3492018-11-03 如何用java输出Excel文件 wnk123456562012-07-19 Java发送邮件Excel附件名 ...
- java如何从https下载链接中下载文件
java如何从https下载链接中下载文件 文章目录 java如何从https下载链接中下载文件 从https 下载文件会存在什么用的问题? 导入安全证书到jdk 下载文件 URL 获取inputSt ...
最新文章
- SpringBoot线程池的创建、@Async配置步骤及注意事项
- Activity的启动模式与flag详解
- python基于happybase对hbase增删改查-thrift1
- ORACLE SQL调优之执行计划与隐藏参数_complex_view_merging
- Uva 11400,照明系统设计
- 关于64位Linux配置android开发环境出现 No such file or directory
- 高可用 kubernetes 集群部署实践
- 平面设计学习社区,让你的作品展示出来
- Android开发笔记(一百三十七)自定义行为Behavior
- Linux 多进程学习
- linux每日命令(20):find命令概览
- python用matplotlib画雷达图_Matplotlib绘制雷达图和三维图的示例代码
- 安卓java模拟器按键精灵,安卓按键精灵实现后台
- 浅谈多元EI会议2019计算机音乐教育在民族音乐EI会议2019计算机传承中的作用
- directshow
- 程序员进阶必备--写文档
- chrome为默认浏览器时,解决ftp无法用windows资源管理器打开,而是跳转到chrome打开
- 奇点云数据中台技术汇(七) | 数据智能模型——数据中台航母的作战集群
- C和C++的二进制,八进制,十六进制输出格式(全面版)
- D3.js之折线图动画