public class WatchFile {
private static final Logger logger = LoggerFactory.getLogger(WatchFile.class);
private ExecutorService executorService = Executors.newSingleThreadExecutor();
private WatchService watchService;
private ConcurrentHashMap<String,List< Callback>> listen = new ConcurrentHashMap<>();
private static WatchFile watchFile;
public static WatchFile getWatchFile() {
if (watchFile == null) {
synchronized (watchFile) {
if (watchFile == null) {
try {
watchFile.watchService = FileSystems.getDefault().newWatchService();
watchFile.executorService.execute(new Task());
} catch (IOException e) {
logger.error("WatchFile初始化錯誤" );
e.printStackTrace();
}
}
}
}
return watchFile;
}
public void register(String fileName, Callback object) {
try {
Paths.get(fileName).register(watchService, StandardWatchEventKinds.ENTRY_MODIFY);
List list = listen.get(fileName);
if(list == null)
list = new ArrayList()
list.add(object);
listen.put(fileName, list);
} catch (IOException e) {
logger.error("加入監(jiān)聽失敗", fileName);
e.printStackTrace();
}
}
static class Task implements Runnable {
@Override
public void run() {
while (true) {
WatchKey watchKey = null;
try {
watchKey = watchFile.watchService.take();
watchKey.pollEvents().stream().forEach(event -> {
WatchEvent<Path> e = (WatchEvent<Path>) event;
Path path = e.context();
String fileName = path.toFile().getName();
List list = watchFile.listen.get(fileName);
for(CallBack callback :list){
callback.callback();
}
});
} catch (Exception e) {
logger.error(e.getMessage(), e);
} finally {
watchKey.reset();
}
}
}
}
監(jiān)聽文件修改
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 簡介 今天在嘗試寫一個jQuer瀑布流插件,想用gulp實現(xiàn)js代碼壓縮,同時為了方便瀏覽器預(yù)覽,要實現(xiàn)熱刷新。 ...
- vs code 查看文件歷史 vs code下載插件,重啟vs code , 然后每次修改都會再根目錄生成一個.h...
- 本文的原始鏈接在我的博客網(wǎng)站上 https://yohunl.com/iosjian-kong-jian-ce-...
- 本事例只為說明如何修改yml文件內(nèi)容。 一、需求是怎么樣修改yml文件內(nèi)容? 配置文件名稱為webinfo.yml...
- (2018-03-02-周五 22:00:57)