1 packageshuai.study.file.monitor;2
3 importjava.io.File;4 importjava.io.IOException;5
6 importorg.apache.commons.io.FileUtils;7 importorg.apache.commons.io.FilenameUtils;8 importorg.apache.commons.io.filefilter.FileFilterUtils;9 importorg.apache.commons.io.monitor.FileAlterationListenerAdaptor;10 importorg.apache.commons.io.monitor.FileAlterationMonitor;11 importorg.apache.commons.io.monitor.FileAlterationObserver;12 importorg.apache.log4j.Logger;13
14 importshuai.study.file.tooler.CommonTooler;15
16 /**
17 *@authorshengshu18 *19 */
20 public class FileMonitor extendsFileAlterationListenerAdaptor {21 private static final Logger LOG = Logger.getLogger(FileMonitor.class);22
23 private staticFileMonitor fileMonitor;24
25 private static int pageNumber = 0;26
27 privateFileMonitor() {28
29 }30
31 //Get singleton object instance
32 public staticFileMonitor getFileMonitor() {33 if (fileMonitor == null) {34 synchronized (FileMonitor.class) {35 if (fileMonitor == null) {36 fileMonitor = newFileMonitor();37 }38 }39 }40
41 returnfileMonitor;42 }43
44 //Create file event
45 @Override46 public voidonFileCreate(File file) {47 LOG.info("[Create]: " +file.getAbsolutePath());48
49 String fileAbsolutePath =file.getAbsolutePath();50 String fileAbsoluteParentPath =file.getParent();51 String fileBaseName =FilenameUtils.getBaseName(fileAbsolutePath);52
53 File destFile = new File(fileAbsoluteParentPath + File.separator + fileBaseName + "-" + CommonTooler.pagingFormat(pageNumber) + ".xml");54
55 try{56 FileUtils.moveFile(file, destFile);57 } catch(IOException ioe) {58 ioe.printStackTrace();59 }60
61 pageNumber++;62 }63
64 //Change file event
65 @Override66 public voidonFileChange(File file) {67 LOG.info("[Change]: " +file.getAbsolutePath());68 }69
70 //Delete file event
71 @Override72 public voidonFileDelete(File file) {73 LOG.info("[Delete]: " +file.getAbsolutePath());74 }75
76 public void monitor(String directory, intinterval) {77 //Observer file whose suffix is pm
78 FileAlterationObserver fileAlterationObserver = newFileAlterationObserver(directory, FileFilterUtils.and(FileFilterUtils.fileFileFilter(),79 FileFilterUtils.suffixFileFilter(".pm")), null);80
81 //Add listener for event (file create & change & delete)
82 fileAlterationObserver.addListener(this);83
84 //Monitor per interval
85 FileAlterationMonitor fileAlterationMonitor = newFileAlterationMonitor(interval, fileAlterationObserver);86
87 try{88 //Start to monitor
89 fileAlterationMonitor.start();90 } catch(Exception e) {91 e.printStackTrace();92 }93 }94 }