java 使用线程监控文件目录变化的实现方法
程序员文章站
2024-02-23 09:13:10
java 使用线程监控文件目录变化的实现方法
由于某种特殊的需求、弄了个使用线程监控文件目录变化的
代码基本如下、其中减去一些复杂的操作、只留下基本代...
java 使用线程监控文件目录变化的实现方法
由于某种特殊的需求、弄了个使用线程监控文件目录变化的
代码基本如下、其中减去一些复杂的操作、只留下基本代码:
package com.file; import java.io.file; import java.util.arraylist; import java.util.hashmap; import java.util.iterator; import java.util.list; import java.util.map; public class filesmonitor implements runnable { // 文件夹路径 private string filepath = "d:\\t\\user\\local\\test\\"; // 存放已读文件<即:缓存目录> private static map<string, file> map = new hashmap<string, file>(); @override public void run() { while (true) { try { // 设置每隔3秒检测一次 thread.sleep(3000); filemonitor(); } catch (interruptedexception e) { e.printstacktrace(); } } } // 文件监听 public void filemonitor() { file[] files = getfiles(filepath, null); if (files != null && files.length > 0) { // 如果缓存中文件与读取的个数不一样的时候 string fname = ""; if (files.length != map.size()) { if (map.size() == 0) { for (file file : files) { fname = file.getname(); map.put(fname, file); system.out.println("新增了文件:" + fname); } } else { // 如果减少了文件 if (map.size() > files.length) { list<string> removename = new arraylist<string>(); iterator<string> iter = map.keyset().iterator(); int j = 0; while (iter.hasnext()) { string key = iter.next(); if (key != null && key.length() > 0) { for (file file : files) { fname = file.getname(); if (fname.equals(key)) { j = 1; break; } } if (j != 1) { removename.add(key); } j = 0; } } // 判断是否有删除的文件 if (removename.size() > 0) { for (string item : removename) { map.remove(item); system.out.println("减少了文件:" + item); } } } else { for (file file : files) { fname = file.getname(); if (!map.containskey(fname.trim())) { map.put(fname, file); system.out.println("新增了文件:" + fname); } } } } } else { map.clear(); for (file file : files) { fname = file.getname(); map.put(fname, file); } } system.out.println("此时缓存中文件个数:" + map.size()); } } /** * 文件读取 * * @param filepath * 路径 * @param filename * 名称 * @return 返回文件数组 */ public file[] getfiles(string filepath, string filename) { file[] files = null; if (filename == null) { file doc = new file(filepath); if (doc.isdirectory()) { string[] filenamearr = doc.list(); if (filenamearr.length > 0) { files = new file[filenamearr.length]; for (int i = 0; i < filenamearr.length; i++) { filename = filenamearr[i]; string fileabspath = filepath + filename; file reginfofile = new file(fileabspath); files[i] = reginfofile; } } } } else { string path = filepath + filename; file doc = new file(path); if (doc.isfile()) { files = new file[1]; files[0] = doc; } } return files; } // 启动线程 public void show() { filesmonitor t = new filesmonitor(); thread tread = new thread(t); tread.setname("eshore"); tread.start(); } // main测试 public static void main(string[] args) { filesmonitor t = new filesmonitor(); t.show(); } }
执行后,效果图如下:
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
上一篇: 命令提示符编译java的方法(必看篇)
推荐阅读
-
java 使用线程监控文件目录变化的实现方法
-
Java使用WatchService监控文件内容变化的示例
-
c#实现数据同步的方法(使用文件监控对象filesystemwatcher)
-
Java对文本文件MD5加密并ftp传送到远程主机目录的实现方法
-
Java实现实时监控目录下文件变化的方法
-
java使用smartupload组件实现文件上传的方法
-
java使用POI实现excel文件的导入和导出(通用方法)
-
java使用smartupload组件实现文件上传的方法
-
Java基础-----与Java集合相关的数据结构&Java集合特点、底层实现、是否线程安全&集合使用选取原则&集合的常见方法及遍历方式
-
Java~多线程ReentrantLock类常用的十四个方法, 使用Condition实现多线程的顺序执行