有一个小需求:
在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包含了文件的创建/删除/修改各种事件。
时间: 2024-10-23 06:34:53