2012-05-30 1 views
1

Я хочу получать уведомления, когда подключен USB-накопитель. Так что java sais: «Drive H: created». Есть ли способ сделать это с помощью WatchService? Наблюдение за корневым каталогом не работает. Он просто наблюдает за корнем текущего диска: Paths.get ("/"). РегистрJava nio WatchService: просмотр списка дисков Windows

ответ

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; 
} 
+0

Что 'метод asList'? – Supuhstar

+1

Я считаю, что это был модифицированный фрагмент кода, который я написал некоторое время назад. 'asList' преобразует' Iterable' в 'List', я отредактирую его. – Jeffrey