让Path.register()注册一个数组列表



我想选择我想要获取的文件系统事件(ENTRY_CREATE, ENTRY_MODIFY和/或ENTRY_DELETE)。是否可以将事件保存在ArrayList<WatchEvent.Kind>中,并将此ArrayList中的所有事件注册为路径?我的想法是:

import static java.nio.file.StandardWatchEventKinds.ENTRY_CREATE;
import static java.nio.file.StandardWatchEventKinds.ENTRY_MODIFY;
import static java.nio.file.StandardWatchEventKinds.ENTRY_DELETE;
...
ArrayList<WatchEvent.Kind> eventList;
...
addEvent(ENTRY_MODIFY);
addEvent(ENTRY_CREATE);
...
for (WatchEvent.Kind<?> event : eventList) {
        key = dir.register(watcher, event);
    }
...
public void addEvent(WatchEvent.Kind event) {
    eventList.add(event);
}

这似乎只将最后一个注册到文件系统,在我的示例中是ENTRY_DELETE。我如何注册所有这些,以便我可以添加我想注册的事件与addEvent()方法?

我自己发现的,它很简单。只需创建一个ArrayList,添加所有你想要添加的事件,并从列表中创建一个Array。可以这样做:

ArrayList<WatchEvent.Kind> eventList = new ArrayList<>();
eventList.add(StandardWatchEventKinds.ENTRY_CREATE);
WatchEvent.Kind[] eventArray = eventList.toArray(new WatchEvent.Kind[eventList.size()]);
key = dir.register(watcher, eventArray);

重要的是,数组中没有元素是null

最新更新