package com.zuidaima.util;

import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardWatchEventKinds;
import java.nio.file.WatchEvent;
import java.nio.file.WatchKey;
import java.nio.file.WatchService;

import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;

import cn.hutool.core.util.CharUtil;
import cn.hutool.log.StaticLog;

/**
 * 文件监控服务
 */
public class FileAlterationListener extends FileAlterationListenerAdaptor {

	@SuppressWarnings("unchecked")
	public static void watchService(String dir) {
		final Path path = Paths.get(dir);

		boolean isUpload = PropsUtil.getBooleanValByProps(PropsUtil.IS_UPLOAD);
		boolean isCopy = PropsUtil.getBooleanValByProps(PropsUtil.IS_OPEN_COPY);
		Integer second = PropsUtil.getIntegerValByProps(PropsUtil.SECOND);

		try (WatchService watchService = FileSystems.getDefault().newWatchService()) {
			
			path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_MODIFY,
					StandardWatchEventKinds.ENTRY_DELETE);
			StaticLog.info("启动成功!");
			while (true) {
				final WatchKey key = watchService.take();
				for (WatchEvent<?> watchEvent : key.pollEvents()) {
					final WatchEvent.Kind<?> kind = watchEvent.kind();
					
					final WatchEvent<Path> watchEventPath = (WatchEvent<Path>) watchEvent;
					final Path fileName = watchEventPath.context();

					if (kind == StandardWatchEventKinds.OVERFLOW) {
						continue;
					}
					// 创建事件
					if (kind == StandardWatchEventKinds.ENTRY_CREATE) {
						// 将文件复制到目标文件夹
						if (isCopy) {
							Thread.sleep(second * 1000);
							String[] dirs = ((String) PropsUtil.props.get(PropsUtil.NEW_DIRS))
									.split(CharUtil.BACKSLASH + PropsUtil.verticalLine);

							for (String root : dirs) {
								CopyFile.copyFile(dir + CharUtil.BACKSLASH + fileName,
										root + CharUtil.BACKSLASH + fileName);
								StaticLog.info("复制到{}成功", root);
							}
						}

						// 上传文件到ftp
						if (isUpload) {
							String[] urls = ((String) PropsUtil.props.get(PropsUtil.FTP_HOST))
									.split(CharUtil.BACKSLASH + PropsUtil.verticalLine);

							String strFileName = dir + CharUtil.BACKSLASH + fileName;

							for (String url : urls) {
								FtpUtil.uploadFile(url, strFileName);
							}
						}
					}
				}
				if (!key.reset()) {
					break;
				}
			}
		} catch (IOException | InterruptedException ex) {
			ex.printStackTrace();
		}
	}
}
最近下载更多
7482166  LV1 2022年12月9日
zw050256  LV7 2022年9月30日
decine  LV1 2022年8月3日
笨小孩一号  LV22 2022年8月2日
crosa_Don  LV18 2022年7月6日
唯一&Mike  LV3 2022年5月1日
xiex909  LV27 2022年3月31日
q13246932  LV1 2022年3月28日
微信网友_5859249697001472  LV1 2022年3月5日
微信网友_5836744970964992  LV1 2022年2月17日
最近浏览更多
操作者 4月10日
暂无贡献等级
WBelong  LV7 3月29日
康日澜  LV9 2023年7月12日
iuchengli 2023年3月17日
暂无贡献等级
7482166  LV1 2022年12月9日
校园网  LV9 2022年11月4日
zw050256  LV7 2022年9月30日
decine  LV1 2022年8月2日
笨小孩一号  LV22 2022年8月2日
crosa_Don  LV18 2022年7月6日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友