最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java 使用線程監(jiān)控文件目錄變化的實(shí)現(xiàn)方法

 更新時(shí)間:2017年10月18日 11:16:12   投稿:lqh  
這篇文章主要介紹了java 使用線程監(jiān)控文件目錄變化的實(shí)現(xiàn)方法的相關(guān)資料,希望通過(guò)本文能幫助到大家,需要的朋友可以參考下

java 使用線程監(jiān)控文件目錄變化的實(shí)現(xiàn)方法

  由于某種特殊的需求、弄了個(gè)使用線程監(jiān)控文件目錄變化的

代碼基本如下、其中減去一些復(fù)雜的操作、只留下基本代碼:

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 {
// 設(shè)置每隔3秒檢測(cè)一次
Thread.sleep(3000);
FileMonitor();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}


// 文件監(jiān)聽(tīng)
public void FileMonitor() {
File[] files = getFiles(filePath, null);
if (files != null && files.length > 0) {
// 如果緩存中文件與讀取的個(gè)數(shù)不一樣的時(shí)候
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("此時(shí)緩存中文件個(gè)數(shù):" + map.size());
}
}


/**
* 文件讀取
* 
* @param filePath
*      路徑
* @param fileName
*      名稱
* @return 返回文件數(shù)組
*/
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;
}


// 啟動(dòng)線程
public void show() {
FilesMonitor t = new FilesMonitor();
Thread tread = new Thread(t);
tread.setName("eshore");
tread.start();
}


// Main測(cè)試
public static void main(String[] args) {
FilesMonitor t = new FilesMonitor();
t.show();
}
}

執(zhí)行后,效果圖如下:

如有疑問(wèn)請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • 使用1招搞定maven打包空間不足的問(wèn)題

    使用1招搞定maven打包空間不足的問(wèn)題

    這篇文章主要介紹了使用1招搞定maven打包空間不足的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-09-09
  • nacos客戶端如何獲取配置

    nacos客戶端如何獲取配置

    這篇文章主要介紹了nacos客戶端如何獲取配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 簡(jiǎn)單講解Java設(shè)計(jì)模式編程中的單一職責(zé)原則

    簡(jiǎn)單講解Java設(shè)計(jì)模式編程中的單一職責(zé)原則

    這篇文章主要介紹了Java設(shè)計(jì)模式編程中的單一職責(zé)原則,這在團(tuán)隊(duì)開(kāi)發(fā)編寫接口時(shí)經(jīng)常使用這樣的約定,需要的朋友可以參考下
    2016-02-02
  • Graphics2D 寫圖片中文亂碼問(wèn)題及解決

    Graphics2D 寫圖片中文亂碼問(wèn)題及解決

    這篇文章主要介紹了Graphics2D 寫圖片中文亂碼問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java File類 mkdir 不能創(chuàng)建多層目錄的解決

    Java File類 mkdir 不能創(chuàng)建多層目錄的解決

    這篇文章主要介紹了Java File類 mkdir 不能創(chuàng)建多層目錄的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • IDEA設(shè)置多行展示導(dǎo)航欄方式

    IDEA設(shè)置多行展示導(dǎo)航欄方式

    在IDEA中開(kāi)啟多行導(dǎo)航欄可以增加工作效率,具體操作步驟包括訪問(wèn)“File”,進(jìn)入“Settings”,選擇“Editor”后修改“EditorTabs”設(shè)置中的“Show tabs in one row”選項(xiàng),取消勾選后保存即可,這使得在打開(kāi)多個(gè)文件時(shí),導(dǎo)航欄可以顯示更多標(biāo)簽,便于管理和查看代碼
    2024-09-09
  • 使用@Validate分組驗(yàn)證參數(shù)

    使用@Validate分組驗(yàn)證參數(shù)

    SpringFramework的@Validated注解用于方法級(jí)別參數(shù)驗(yàn)證,結(jié)合BeanValidation規(guī)范,支持分組驗(yàn)證,通過(guò)指定驗(yàn)證分組,可以在不同場(chǎng)景下執(zhí)行不同的驗(yàn)證邏輯
    2024-11-11
  • 靜態(tài)方法中調(diào)用Spring注入過(guò)程解析

    靜態(tài)方法中調(diào)用Spring注入過(guò)程解析

    這篇文章主要介紹了靜態(tài)方法中調(diào)用Spring注入過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • 深入理解Java的Spring框架中的IOC容器

    深入理解Java的Spring框架中的IOC容器

    IOC(Inversion of Control,控制反轉(zhuǎn))是Spring框架的核心,負(fù)責(zé)控制對(duì)象的生命周期與關(guān)系,接下來(lái)就讓我們跟隨文章來(lái)深入理解Java的Spring框架中的IOC容器:
    2016-07-07
  • java.sql.Date和java.util.Date的區(qū)別詳解

    java.sql.Date和java.util.Date的區(qū)別詳解

    Java中有兩個(gè)Date類,一個(gè)是java.util.Date通常情況下用它獲取當(dāng)前時(shí)間或構(gòu)造時(shí)間,另一個(gè)是java.sql.Date是針對(duì)SQL語(yǔ)句使用的,它只包含日期而沒(méi)有時(shí)間部分,這篇文章主要給大家介紹了關(guān)于java.sql.Date和java.util.Date區(qū)別的相關(guān)資料,需要的朋友可以參考下
    2023-03-03

最新評(píng)論

通榆县| 班戈县| 信丰县| 乌拉特后旗| 泸溪县| 鄄城县| 凤翔县| 志丹县| 休宁县| 五莲县| 若尔盖县| 肇源县| 永清县| 宝山区| 双峰县| 布拖县| 华宁县| 响水县| 涡阳县| 乡宁县| 彭州市| 牙克石市| 汾阳市| 和田市| 资溪县| 新干县| 昭通市| 镇宁| 织金县| 铁力市| 洪雅县| 双峰县| 永善县| 元谋县| 甘孜| 阳信县| 嘉善县| 理塘县| 城固县| 景宁| 南汇区|