【监听文件 多线程】使用java--WatchService监听文件 开启多线程copy文件
有一个小需求:
在PC跟前没有人的时候,迅雷下载文件 至PC磁盘上,并且自动移动文件到U盘上,小主只要在走的时候取走U盘即可。
基于这个需求,有了下面这段代码:【JDK 1.8】
package com.sxd.moveFile; import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardWatchEventKinds;
import java.nio.file.WatchKey;
import java.nio.file.WatchService;
import java.util.concurrent.TimeUnit; import org.junit.Test; import com.google.common.io.Files; /**
* 监听某个文件夹下--如果有新的文件出现 则移动文件到指定目录下
* @author Administrator
*
*/
public class MoveFile implements Runnable{ public static String fileName = null; @Test
public void test() throws IOException, InterruptedException{
moveFile();
} public void moveFile() throws IOException, InterruptedException{ final Path path = Paths.get("E:/迅雷下载");
final WatchService watchService = path.getFileSystem().newWatchService();
path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE);//创建并启动监听 --创建文件的事件 // final WatchKey watchKey = watchService.poll(20, TimeUnit.MINUTES);//poll()监听停止的条件--持续20分钟 20分钟后关闭监听
final WatchKey watchKey = watchService.take();//take()等不到此类事件发生就一直运行 if(watchKey != null) {
watchKey.pollEvents().stream().forEach(event ->
{
//执行本次 触发后的方法体
System.out.println(event.context());System.out.println(event.kind().name());
//仅 判断 新创建文件后缀为.rmvb的 才进行如下 操作
if(event.context().toString().substring(event.context().toString().lastIndexOf(".")).equals(".rmvb") || event.context().toString().substring(event.context().toString().lastIndexOf(".")).equals(".mkv")){
fileName = event.context().toString(); MoveFile mf = new MoveFile();
Thread thread1 = new Thread(mf);//开启一个新的线程
thread1.start();
}
});
//再次执行
try {
moveFile();
} catch (Exception e1) {
e1.printStackTrace();
} } } @Override
public void run() {
try {
Files.copy(new File("E:/迅雷下载/"+fileName), new File("J:/U盘/迅雷下载/"+fileName));
} catch (Exception e) {
e.printStackTrace();
}
}
}
其中 关于文件系统注册的监听器上,有监听事件类型:

Overflow包含了文件的创建/删除/修改各种事件。
【监听文件 多线程】使用java--WatchService监听文件 开启多线程copy文件的更多相关文章
- java 弹出选择目录框(选择文件夹),获取选择的文件夹路径
java 弹出选择目录框(选择文件夹),获取选择的文件夹路径 java 弹出选择目录框(选择文件夹),获取选择的文件夹路径:int result = 0;File file = null;String ...
- 利用WatchService监听文件变化
在实现配置中心的多种方案中,有基于JDK7+的WatchService方法,其在单机应用中还是挺有实践的意义的. 代码如下: package com.longge.mytest; import jav ...
- java 事件监听 - 鼠标
java 事件监听 - 鼠标 //事件监听 //鼠标事件监听 //鼠标事件监听有两个实现接口 //1.MouseListener 普通的鼠标操作 //2.MouseMotionListener 鼠标的 ...
- java 事件监听 - 键盘
java 事件监听 - 键盘 //事件监听 //键盘事件监听,写了一个小案例,按上下左右,改变圆形的位置,圆形可以移动 import java.awt.*; import javax.swing.*; ...
- java 事件监听 - 控件
java 事件监听 //事件监听 //事件监听,写了一个小案例,点击按钮改变面板的颜色. import java.awt.*; import javax.swing.*; import java.aw ...
- Java线程监听,意外退出线程后自动重启
Java线程监听,意外退出线程后自动重启 某日,天朗气清,回公司,未到9点,刷微博,顿觉问题泛滥,惊恐万分! 前一天写了一个微博爬行程序,主要工作原理就是每隔2分钟爬行一次微博,获取某N个关注朋友微博 ...
- java事件监听机制
1.简单的事件监听 package demo2; /* * java事件监听机制 */ import java.awt.*; import javax.swing.*; import java.awt ...
- Java事件监听的四种实现方式
1.事件对象: 一般继承自java.util.EventObject对象,由开发者自行定义. 2.事件源: 就是触发事件的源头,不同的事件源会触发不同的事件类型. 3.事件监听器: 事件监听器负责监听 ...
- java事件监听机制2
今天早上的两点收获: 1.addActionListener(其中的setActionCommand函数就是要对对象进行唯一性的标记,便于消息传来后进行处理.理论上actionlistener可以全部 ...
- JAVA事件监听机制的实现
今天学习了java的事件编程机制,略有体会,先在此记下心得. 第一,首先明确几个概念. 事件源:一个产生或者触发事件的对象.事件:承载事件源状态改变时的信息对象.事件监听器接口:实际上就是一个类,该类 ...
随机推荐
- Oracle下批量将一个用户的所有表的select权限赋值给另外一个用户
起因 为什么会有这篇文章呢? 因为最近在做项目的时候遇到一个问题...实际生产环境中程序datasource登陆的Oracle数据库用户user1不是我们创建的.这个用户没有访问我们业务表的权限(因为 ...
- SSAS 通过 ETL 自动建立分区
一.动态分区的好处就不说了,随着时间的推移,不可能一个度量值组都放在一个分区中,处理速度非常慢,如何动态添加分区,如何动态处理分区,成为了很多新手BI工程师一个头痛的问题,废话不多说,分享一下我的经验 ...
- linux 命令01
mkdir 创建目录 cd 进入目录 touch 创建文件 touch oldboy.txt vi 编辑器,相当于记事本,有编辑功能,较弱 vim 复杂编辑器,相当于,emeditor,editplu ...
- WindowsForm多窗体、多窗体传值、控件数据绑定--2016年12月8日
多窗体 Show Form1 f1 = new Form1(); f1.Show(); ShowDialog--在父窗体之上 Form1 f1 = new Form1(); f1.ShowDialog ...
- github添加ssh方法(windows版)
生成一个新的SSH key 打开 git bash 输入 ssh-keygen -t rsa -b 4096 -C "your_email@example.com" 输入一个文件 ...
- sql查询删除重复数据
数据库UserInfo 删除重复数据 即删除重复的用户名手机号 同一个用户名手机号只保留一个用户 01.根据多个字段查询重复数据 with data1 as( select MobilePhone,N ...
- kettle转换和作业插件开发及调试
这是一篇几年前写下的文档,最近打算根据这篇文档重写一下kettle插件的教程.结果各种理由,一推再推.今天索性将这篇文档发布出来,分享给大家,例子等有空再补上.这是一篇基于kettle3.2基础上完成 ...
- DevExpress 标题栏添加搜索功能
上图是效果图 附件示例代码下载
- ABAP 出库单打印 产品 A搭A A搭B显示方式
*&---------------------------------------------------------------------* *& Report *& ...
- 【webGL】threejs常用的api
/*** 场景(scene) ***/ var scene = new THREE.Scene(); // 创建场景 scene.add(x); // 插入场景 /*** 相机(camera) *** ...