1
我希望在連接USB驅動器時收到通知。所以,Java的SAIS:「驅動器H:創建」。 有沒有辦法用WatchService來做到這一點?看着根目錄不起作用。它只是監視當前驅動器的根目錄: Paths.get(「/」)。寄存器Java nio WatchService:觀看Windows驅動器列表
我希望在連接USB驅動器時收到通知。所以,Java的SAIS:「驅動器H:創建」。 有沒有辦法用WatchService來做到這一點?看着根目錄不起作用。它只是監視當前驅動器的根目錄: Paths.get(「/」)。寄存器Java nio WatchService:觀看Windows驅動器列表
你不能用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