Java nio WatchService:观看Windows驱动器列表

时间:2012-05-30 17:55:19

标签: java windows nio watchservice

我希望在连接USB驱动器时收到通知。所以java sais:“Drive H:created”。 有没有办法用WatchService做到这一点?观看根目录不起作用。它只是观察当前驱动器的根目录:     Paths.get( “/”)。寄存器

1 个答案:

答案 0 :(得分:4)

你不能用WatchService做到这一点。由于您只担心Windows,因此您只需轮询FileSystem.getRootDirectories并检测更改。

try {
   List<Path> roots = asList(FileSystems.getDefault().getRootDirectories());
   for(;;) {
        Thread.sleep(500);

        List<Path> newRoots = asList(FileSystems.getDefualt().getRootDirectories());
        for(Path newRoot : newRoots){
            if(!roots.contains(newRoot)) {
                System.out.println("New drive detected: " + newRoot);
            }
        }
        roots = newRoots;
    }
} catch(InterruptedException e) {
    e.printStackTrace();
    Thread.currentThread().interrupt();
}

如果您希望在其他操作系统上使用此功能,则必须轮询FileSystem.getFileStores并找到get the root path for a FileStore的方法。

/ E1

private <T> List<T> asList(Iterable<T> i) {
    if (i instanceof List) { return (List<T>) i; }

    List<T> l = new ArrayList<>();
    for (T t : i) {
        l.add(t);
    }
    return l;
}