java7 NIO2 watching service API

java

java7 NIO2新增了文件系统的相关事件处理API,为目录,文件新增修改删除等事件添加事件处理。

package reyo.sdk.utils.file;

import java.io.IOException;

import java.nio.file.FileSystems;

import java.nio.file.Path;

import java.nio.file.Paths;

import java.nio.file.StandardWatchEventKinds;

import java.nio.file.WatchEvent;

import java.nio.file.WatchEvent.Kind;

import java.nio.file.WatchKey;

import java.nio.file.WatchService;

public class NIO2WatchService {

// WatchService 是线程安全的,跟踪文件事件的服务,一般是用独立线程启动跟踪

public void watchRNDir(Path path) throws IOException, InterruptedException {

try (WatchService watchService = FileSystems.getDefault().newWatchService()) {

// 给path路径加上文件观察服务

path.register(watchService, StandardWatchEventKinds.ENTRY_CREATE, StandardWatchEventKinds.ENTRY_MODIFY, StandardWatchEventKinds.ENTRY_DELETE);

// start an infinite loop

while (true) {

// retrieve and remove the next watch key

final WatchKey key = watchService.take();

// get list of pending events for the watch key

for (WatchEvent<?> watchEvent : key.pollEvents()) {

// get the kind of event (create, modify, delete)

final Kind<?> kind = watchEvent.kind();

// handle OVERFLOW event

if (kind == StandardWatchEventKinds.OVERFLOW) {

continue;

}

// 创建事件

if (kind == StandardWatchEventKinds.ENTRY_CREATE) {

}

// 修改事件

if (kind == StandardWatchEventKinds.ENTRY_MODIFY) {

}

// 删除事件

if (kind == StandardWatchEventKinds.ENTRY_DELETE) {

}

// get the filename for the event

@SuppressWarnings("unchecked")

final WatchEvent<Path> watchEventPath = (WatchEvent<Path>) watchEvent;

final Path filename = watchEventPath.context();

// print it out

System.out.println(kind + " -> " + filename);

}

// reset the keyf

boolean valid = key.reset();

// exit loop if the key is not valid (if the directory was

// deleted, for

if (!valid) {

break;

}

}

}

}

/**

* @param args

*/

public static void main(String[] args) {

// String sourceDir = "D:\\temp";

//

// Vector<String> v1 = FileOptionUtil.listAllDirAndFile(sourceDir,

// sourceDir, true);

//

// for (int i = 0; i < v1.size(); i++) {

// String fileNameb = v1.get(i);

// if (fileNameb.indexOf(".") != -1) {

// fileNameb = FileOptionUtil.getFileNameNoEx(fileNameb).substring(0,

// FileOptionUtil.getFileNameNoEx(fileNameb).length() - 14) + "." +

// FileOptionUtil.getExtensionName(fileNameb);

// } else {

// fileNameb = fileNameb.substring(0, fileNameb.length() - 14);

// }

//

// }

final Path path = Paths.get("D:\\temp");

NIO2WatchService watch = new NIO2WatchService();

try {

watch.watchRNDir(path);

} catch (IOException | InterruptedException ex) {

System.err.println(ex);

}

}

}

以上是 java7 NIO2 watching service API 的全部内容, 来源链接: utcz.com/z/391307.html

回到顶部