文件监听
监听配置
package com.access.config;
import com.access.util.SmbUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.List;
@Slf4j
@Component
public class WatchServiceThread implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
new Thread(new Runnable() {
@Override
public void run() {
watchFile();
}
}).start();
log.info("---[文件监听服务]---已启动---监听的目录为:" + DataInitLoad.WATCH_FILE);
}
private void watchFile() {
Path targetPath = Paths.get(DataInitLoad.WATCH_FILE);
try (WatchService watchService = targetPath.getFileSystem().newWatchService()) {
Files.walkFileTree(targetPath, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
dir.register(watchService,
StandardWatchEventKinds.ENTRY_CREATE,
StandardWatchEventKinds.ENTRY_DELETE,
StandardWatchEventKinds.ENTRY_MODIFY);
return FileVisitResult.CONTINUE;
}
});
WatchKey watchKey = null;
while (true) {
try {
System.out.println("文件监听=================================================================>");
watchKey = watchService.take();
List<WatchEvent<?>> watchEvents = watchKey.pollEvents();
for (final WatchEvent<?> event : watchEvents) {
WatchEvent<Path> watchEvent = (WatchEvent<Path>) event;
WatchEvent.Kind<Path> kind = watchEvent.kind();
Path watchable = ((Path) watchKey.watchable()).resolve(watchEvent.context());
if (Files.isDirectory(watchable)) {
if (kind == StandardWatchEventKinds.ENTRY_CREATE) {
log.info(">>>新建目录--->" + watchable);
Files.walkFileTree(watchable, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
dir.register(watchService,
StandardWatchEventKinds.ENTRY_CREATE,
StandardWatchEventKinds.ENTRY_DELETE,
StandardWatchEventKinds.ENTRY_MODIFY);
return FileVisitResult.CONTINUE;
}
});
}
} else {
if (kind == StandardWatchEventKinds.ENTRY_CREATE) {
log.info(">>>新建文件--->" + watchable);
} else if (StandardWatchEventKinds.ENTRY_MODIFY == event.kind()) {
log.info(">>>修改文件--->" + watchable);
Thread.sleep(5000);
SmbUtils.uploadFileToSharedFolder(watchable.toString());
} else if (StandardWatchEventKinds.ENTRY_DELETE == event.kind()) {
log.info(">>>删除文件--->" + watchable);
Thread.sleep(5000);
SmbUtils.deleteFile(watchable.toString());
}
}
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (watchKey != null) {
watchKey.reset();
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
}