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

简介: 有一个小需求:在PC跟前没有人的时候,迅雷下载文件 至PC磁盘上,并且自动移动文件到U盘上,小主只要在走的时候取走U盘即可。基于这个需求,有了下面这段代码:【JDK  1.8】 1 package com.

有一个小需求:

在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包含了文件的创建/删除/修改各种事件。

 

相关文章
|
1天前
|
消息中间件 缓存 NoSQL
Java多线程实战-CompletableFuture异步编程优化查询接口响应速度
Java多线程实战-CompletableFuture异步编程优化查询接口响应速度
|
1天前
|
数据采集 存储 Java
高德地图爬虫实践:Java多线程并发处理策略
高德地图爬虫实践:Java多线程并发处理策略
|
2天前
|
安全 算法 Java
JavaSE&多线程&线程池
JavaSE&多线程&线程池
15 7
|
2天前
|
缓存 Java
【Java基础】简说多线程(上)
【Java基础】简说多线程(上)
6 0
|
2天前
|
并行计算 算法 安全
Java从入门到精通:2.1.3深入学习Java核心技术——掌握Java多线程编程
Java从入门到精通:2.1.3深入学习Java核心技术——掌握Java多线程编程
|
2天前
|
存储 缓存 NoSQL
为什么Redis使用单线程 性能会优于多线程?
在计算机领域,性能一直都是一个关键的话题。无论是应用开发还是系统优化,我们都需要关注如何在有限的资源下,实现最大程度的性能提升。Redis,作为一款高性能的开源内存数据库,因其出色的单线程性能而备受瞩目。那么,为什么Redis使用单线程性能会优于多线程呢?
15 1
|
2天前
|
安全 Java 编译器
是时候来唠一唠synchronized关键字了,Java多线程的必问考点!
本文简要介绍了Java中的`synchronized`关键字,它是用于保证多线程环境下的同步,解决原子性、可见性和顺序性问题。从JDK1.6开始,synchronized进行了优化,性能得到提升,现在仍可在项目中使用。synchronized有三种用法:修饰实例方法、静态方法和代码块。文章还讨论了synchronized修饰代码块的锁对象、静态与非静态方法调用的互斥性,以及构造方法不能被同步修饰。此外,通过反汇编展示了`synchronized`在方法和代码块上的底层实现,涉及ObjectMonitor和monitorenter/monitorexit指令。
15 0
|
17天前
|
存储 Java 数据库连接
java多线程之线程通信
java多线程之线程通信
|
28天前
|
存储 缓存 NoSQL
Redis单线程已经很快了6.0引入多线程
Redis单线程已经很快了6.0引入多线程
31 3
|
1月前
|
消息中间件 安全 Linux
线程同步与IPC:单进程多线程环境下的选择与权衡
线程同步与IPC:单进程多线程环境下的选择与权衡
58 0

热门文章

最新文章