Я хочу получать уведомления, когда подключен USB-накопитель. Так что java sais: «Drive H: created». Есть ли способ сделать это с помощью WatchService? Наблюдение за корневым каталогом не работает. Он просто наблюдает за корнем текущего диска: Paths.get ("/"). РегистрJava nio WatchService: просмотр списка дисков Windows
1
A
ответ
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;
}
Что 'метод asList'? – Supuhstar
Я считаю, что это был модифицированный фрагмент кода, который я написал некоторое время назад. 'asList' преобразует' Iterable' в 'List', я отредактирую его. – Jeffrey