package yungoal.huafeng.utils.files;
import com.sun.deploy.util.SyncFileAccess;
import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver;
import java.io.File;
public class FolderWatcher extends FileAlterationListenerAdaptor {
FileAlterationMonitor monitor;
public FolderWatcher(String directory) {
monitor = new FileAlterationMonitor(500);
FileAlterationObserver fileObserver = new FileAlterationObserver(directory);
fileObserver.addListener(this);
monitor.addObserver(fileObserver);
}
public void start(boolean isDaemonThread) throws Exception {
if (isDaemonThread) {
monitor.setThreadFactory(r -> {
Thread th = new Thread(r);
th.setDaemon(true);
return th;
});
}
monitor.start();
}
@Override
public void onFileChange(File file) {
System.out.println("change" + file);
}
@Override
public void onFileCreate(File file) {
while (true) {
try {
SyncFileAccess fileAccess = new SyncFileAccess(file);
SyncFileAccess.FileInputStreamLock lock = fileAccess.openLockFileInputStream(1000, false);lock.getFileInputStream().close();
lock.release();
break;
} catch (Exception e)
{ try { Thread.sleep(100); } catch (InterruptedException ignored) { } } } System.out.println("create:" + file); } }
调用方法:
new FolderWatcher(configdir).start(true);
需要jar包 commons-io
需要jar包deploy.jar 这个jar包在C:\Java\jdk1.8.0_201\jre\lib 下 复制到项目中添加依赖就可以了
maven 打包时把C:\Java\jdk1.8.0_201\jre\lib 加入到classpath