【监听文件 多线程】使用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的事件编程机制,略有体会,先在此记下心得. 第一,首先明确几个概念. 事件源:一个产生或者触发事件的对象.事件:承载事件源状态改变时的信息对象.事件监听器接口:实际上就是一个类,该类 ... 
随机推荐
- Yii2 基于RESTful架构的 advanced版API接口开发 配置、实现、测试 (转)
			环境配置: 开启服务器伪静态 本处以apache为例,查看apache的conf目录下httpd.conf,找到下面的代码 LoadModule rewrite_module modules/mod_ ... 
- 三种执行SQL语句的的JAVA代码
			问题描述: 连接数据库,执行SQL语句是必不可少的,下面给出了三种执行不通SQL语句的方法. 1.简单的Statement执行SQL语句.有SQL注入,一般不使用. public static voi ... 
- Linux系统下配置环境变量
			一.环境变量文件介绍 转自:http://blog.csdn.net/cscmaker/article/details/7261921 Linux中环境变量包括系统级和用户级,系统级的环境变量是每个登 ... 
- 有哪些经常被误用的 HTML、JavaScript、CSS 的元素、方法和属性?
			一,以前想要把一个元素(input 之类的)设成只读的时候都是用 disabled,后来发现这是不对的. 因为在 HTML 里面,如果一个元素被设置成 disabled, 那么它的值就不会被发送到 s ... 
- python smtp 群发邮件
			最近工作中遇到使用脚本处理问题并发送结果邮件,使用python的smtp模块很简单的完成了实现.今天遇到一个问题,根据脚本的测试结果需要群发邮件,但是发送邮件的py文件只有首个地址收到了邮件.仔细排查 ... 
- json 使用 (下)
			使用JSON JSON也就是JavaScript Object Notation,是一个描述数据的轻量级语法.JSON的优雅是因为它是JavaScript语言的一个子集.接下来你将看到它为什么如此重要 ... 
- javac编译不同目录的源码提示找不到符号
			对于单个文件的且不引用其他类文件的java源码用javac编译大家都很熟悉即 javac mycode.java 但是如果这个文件引用到了其他的类文件,在进行编译的时候就会提示找不到符号,这时我们需要 ... 
- jQuery sibings()的作用
			jQuery sibings()的作用: siblings() 获得匹配集合中每个元素的同胞,通过选择器进行筛选是可选的. 当我们要对一个<li></li>列表的操作的时候,只 ... 
- C# 3种方法连接MySql
			转 http://wenku.baidu.com/view/d0cf34708e9951e79b8927c7.html C# 连接MYSQL数据库的方法及示例 连接MYSQL数据库的方法及示例 方 ... 
- WebClient 实现多文件/文本同时上传
			public class CreateBytes { Encoding encoding = Encoding.UTF8; /**/ /// <summary> /// 拼接所有的二进制数 ... 
