这里写链接内容 - WatchService
public class WatchServiceTest {
public static void main(String[] args) {
try {
WatchService watchService = FileSystems.getDefault().newWatchService();
Paths.get("D:\\").register(watchService, StandardWatchEventKinds.ENTRY_CREATE,
StandardWatchEventKinds.ENTRY_DELETE,StandardWatchEventKinds.ENTRY_MODIFY);
while(true){
WatchKey key = watchService.take();
for (WatchEvent<?> event : key.pollEvents()) {
System.out.println(event.context()+ "发生了"+event.kind()+"事件");
}
boolean vaild = key.reset();//重设WatchKey
if (!vaild) {//如果重设失败,退出监听
break;
}
}
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
}
结果:
作者使用的是D盘目录进行监听,这个监控文件变化的监听器可以做到对D盘和它的第一级子目录的变化进行监听,对它的子目录内部的变化无法做到监听。
WatchService有3个方法来获取舰艇目录的文件变化事件。
poll():获取下一个WatchKey,如果没有WatchKey发生就立即返回null。
poll(long timeout, TimeUnit unit):尝试等待timeout时间去获取下一个WatchKey。
take() : 获取下一个WatchKey,如果没有WatchKey发生就移植等待。
如果程序需要一直监控,则选择take()方法。如果程序需要监听指定时间,使用poll()方法。
- 访问文件属性
public class AttributeViewTest {
public static void main(String[] args) {
Path testPath = Paths.get(".\\src\\com\\yin\\nio\\AttributeViewTest.java");
BasicFileAttributeView basicView = Files.getFileAttributeView(testPath,
BasicFileAttributeView.class);
try {
BasicFileAttributes basicFileAttributes = basicView.readAttributes();
PrintStr("创建时间:"+new Date(basicFileAttributes.creationTime().toMillis()).toLocaleString());
PrintStr("最后访问时间:"+new Date(basicFileAttributes.lastAccessTime().toMillis()).toLocaleString());
PrintStr("最后修改时间:"+new Date(basicFileAttributes.lastModifiedTime().toMillis()).toLocaleString());
PrintStr("文件大小:"+basicFileAttributes.size());
} catch (IOException e) {
e.printStackTrace();
}
}
private static void PrintStr(String str){
System.out.println(str);
}
}
结果:
时间: 2024-10-07 11:27:04