心灵毒鸡汤:不论你在什么时候开始,重要的是,开始之后就不要停止。
主要功能:
使用线程实时监测某路经下某个文件夹内文件的新增,将新增文件打印到控制台。
代码展示:
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);
}
}
控制台输出内容:

监控的本地文件夹:

我可以接受失败,但不可以接受放弃!
浙公网安备 33010602011771号