package com.haiersoft.health.equipment;import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.logging.Logger;/**
 * <p>
 * Description:监控某个文件路径下的变化
 * </p>
 * 
 * @author lilubing
 * @version $Revision 1.1 $ 2012-06-24 下午04:31:26
 */
public class DirMonitorDetail implements Runnable { /**
 * 监控的文件路径
 */
private String dir; /**
 * 扫描间隔时间以秒为单位
 */
private long period; /**
 * 原有文件信息
 */
private Map<String, String> oldDirFileMap; /**
 * log4j
 */
private static final Logger logger = Logger.getLogger("DirMonitor"); private String OperationFileName; /**
 * 初始化相关数据
 */
public DirMonitorDetail(String dir, int period) {
this.dir = dir;
this.period = period;
this.oldDirFileMap = new HashMap<String, String>();
} /**
 * 线程的执行。对于修改文件的情况,则视为删除与增加两个操作。
 */
public void run() {
logger.info("DirMonitor 运行");
boolean isError = false;
File file = new File(dir);
// 初始化开始监控时的文件路径状态
totalScan(file, oldDirFileMap);
// 展示原有路径下的文件信息
displayNowFile();
while (!isError) {
try {
Thread.sleep(period);
// 指定时间间间隔后扫描路径
Map<String, String> nowDirFileMap = new HashMap<String, String>();
totalScan(file, nowDirFileMap);
// 得到删除的文件及文件夹
getDeletedFile(nowDirFileMap);
// 得到新增的文件及文件夹
getAddedFile(nowDirFileMap);
// 注意:由于涉及到修改,所以一定要先检测删除的文件,然后再检测新增加的文件 } catch (InterruptedException e) {
logger.info("对指定的文件路径进行监控时产生异常,异常信息为:" + e.getMessage());
isError = true;
}
}
} /**
 * 
 * 
 * @param file
 *            要扫描的路径
 * @param dirFileMap
 *            存放扫描结果
 */
private void totalScan(File file, Map<String, String> dirFileMap) {
String[] fileList = file.list();
// 判断是否为空目录
if (null != fileList) {
for (int i = 0; i < fileList.length; i++) {
String pname = file.getAbsolutePath() + "\\" + fileList[i];
//File tempFile = new File(pname);
dirFileMap.put("文件夹:" + pname, pname + "");// 修改了此处
}
}
} /**
 * 得到增加的文件及文件夹,并增加到已有的文件信息中
 */
private void getAddedFile(Map<String, String> nowDirFileMap) {
for (Iterator<String> iterator = nowDirFileMap.keySet().iterator(); iterator
.hasNext();) {
String key = iterator.next();
String oldValue = oldDirFileMap.get(key);
String newValue = nowDirFileMap.get(key);
if (null == oldValue) {
oldDirFileMap.put(key, newValue);
logger.info("新增的" + key);
this.processFile(key);
}
}
} /**
 * 得到删除的文件及文件夹,并删除已经不存在的文件信息
 */
private void getDeletedFile(Map<String, String> nowDirFileMap) {
for (Iterator<String> iterator = oldDirFileMap.keySet().iterator(); iterator
.hasNext();) {
String key = iterator.next();
String oldValue = oldDirFileMap.get(key);
String newValue = nowDirFileMap.get(key);
if (null == nowDirFileMap.get(key)) {
// System.out.println("删除的" + key);
iterator.remove();
oldDirFileMap.remove(key);
} else if (!newValue.equals(oldValue)) {// 修改了此处
// System.out.println("修改的" + key);
oldDirFileMap.put(key, newValue);
}
}
} /**
 * 展示原有文件
 */
private void displayNowFile() {
logger.info("展示原有文件");
System.out.println(dir + "路径原有文件目录如下:\n");
Set set = oldDirFileMap.keySet();
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());// 此处修改
}
System.out.println("========================");
} /**
 * 对添加文件夹中的文件进行操作
 */
public void processFile(String fileName) {
OperationFileName = "\\nihao.txt";
String fileTemp = fileName+OperationFileName;
if (fileTemp.lastIndexOf(".txt") != -1) {
ReadTxtFile.read(fileTemp);//调用读txt 文本类
} } /**
 * just for test
 * 
 * @param args
 */
public static void main(String[] args) {
DirMonitorDetail dirMonitor = new DirMonitorDetail("D:\\temp", 500);
dirMonitor.run();
 //System.out.println(readTxtFile("D:\\temp\\nihao - 副本\\nihao.txt"));
}
}
package com.haiersoft.health.equipment;import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.logging.Logger;public class ReadTxtFile {
/**
 * log4j
 */
private static final Logger logger = Logger.getLogger("DirMonitor");

/**
 * 读取文本文件.
 * 
 */
public static synchronized String read(String fileName) {
logger.info(fileName);
String read = null;
FileReader fileread = null;
String content = null;
System.out.println(fileName);
File file = new File(fileName);
System.out.println(file);
try {
fileread = new FileReader(file);
BufferedReader bufread = new BufferedReader(fileread);
try {
while ((read = bufread.readLine()) != null) {
content = content + read + "\r\n";
}
} catch (IOException e) {
logger.info("对指定的文件路径进行监控时产生异常,异常信息为:" + e.getMessage());
e.printStackTrace();
}
} catch (FileNotFoundException e) {
logger.info("对指定的文件路径进行监控时产生异常,异常信息为:" + e.getMessage());
e.printStackTrace();
} System.out.println("文件内容是:" + "\r\n" + content);
return content;
}
}