DataEra_Kelly
让别人相信你之前,你得让自己相信自己,你可以!

 

心灵毒鸡汤:不论你在什么时候开始,重要的是,开始之后就不要停止。

 

主要功能:

使用线程实时监测某路经下某个文件夹内文件的新增,将新增文件打印到控制台。

代码展示:

 

import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.file.*;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/**
* @author Administrator
*/
@Component
public class TestDemoController implements ApplicationRunner {

/**
*
* @param applicationArguments
* @throws Exception
*/

//项目启动后执行的方法
@Override
public void run(ApplicationArguments applicationArguments) throws Exception {
getFile();
}



private static String path = "F:\\JavaDemo";
public static void getFile() throws FileNotFoundException, IOException {

ScheduledThreadPoolExecutor scheduled = new ScheduledThreadPoolExecutor(2);
scheduled.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
WatchKey key;
try {
WatchService watchService = FileSystems.getDefault().newWatchService();
Paths.get(path).register(watchService, StandardWatchEventKinds.ENTRY_CREATE);
while (true) {
File file = new File(path);//path为监听文件夹
File[] files = file.listFiles();
System.out.println("监测文件线程运行中");
key = watchService.take();//没有文件增加时,阻塞在这里
for (WatchEvent<?> event : key.pollEvents()) {
String fileName = path + "\\" + event.context();
System.out.println("增加文件的文件夹路径 :" + fileName);
System.out.println("增加文件的名称 :" + event.context());
/*
* 判断新增文件是否为文件夹,
* 不是文件夹即可读取文件入库,
* 是文件夹就要进入下级目录监听
*/
int result1 = event.context().toString().indexOf(".");
if(result1 == -1){
/*
* 新增文件夹,监测新增文件夹内的内容
*/
getFileSon(fileName);
}else if(event.context().toString().contains("txt")){
System.out.println("执行读取txt文件方法");
}else if(event.context().toString().contains("xml")){
System.out.println("执行读取xml文件方法");
}
}
if (!key.reset()) {
break; //中断循环
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}, 2000, 3000, TimeUnit.MILLISECONDS);

}

public static void getFileSon(String pathson) throws FileNotFoundException, IOException {
ScheduledThreadPoolExecutor schedulers = new ScheduledThreadPoolExecutor(2);
schedulers.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
WatchKey key;
try {
WatchService watchService = FileSystems.getDefault().newWatchService();
Paths.get(pathson).register(watchService, StandardWatchEventKinds.ENTRY_CREATE);
while (true) {
File file = new File(pathson);//path为监听文件夹
File[] files = file.listFiles();
System.out.println("监测文件线程运行中");
key = watchService.take();//没有文件增加时,阻塞在这里
for (WatchEvent<?> event : key.pollEvents()) {
String fileName = pathson + "\\" + event.context();
System.out.println("增加文件的文件夹路径 :" + fileName);
System.out.println("增加文件的名称 :" + event.context());
if(event.context().toString().contains("txt")){
System.out.println("执行读取txt文件方法");
}else if(event.context().toString().contains("xml")){
System.out.println("执行读取xml文件方法");
}
}
if (!key.reset()) {
break; //中断循环
}
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}, 2000, 3000, TimeUnit.MILLISECONDS);

}
}


控制台输出内容:

 

 

 

监控的本地文件夹:

 

posted on 2020-06-16 14:08  DataEra_Kelly  阅读(442)  评论(1)    收藏  举报