Немного поздний ответ, но я думал, что стоит поделиться ...
Поскольку Java API по умолчанию не поставляется с этой функцией, вы можете использовать внешние библиотеки, как упомянуто выше, однако лично мне было гораздо удобнее (для windows) иметь exe-файл стороннего производителя в пути к классу jar, распаковать его временная папка, запустите ее при необходимости, а затем удалите, как только приложение будет завершено.
В качестве сторонней программы я использовал это , которая является единственной программой CLI, которая может делать несколько трюков с подключенными устройствами, а затем использовал этот код:
FileUtils.copyInputStreamToFile(MyClass.class.getClassLoader().getResourceAsStream(program),TEMP_EJECT_PROGRAM);
, чтобы экспортировать его во временный файл (используя ApacheIO, вы определенно можете обойтись без него), и этот код:
private void safelyRemoveDrive(final String driveLetter) {
new Thread(new Runnable() {
public void run() {
if (TEMP_EJECT_PROGRAM.exists()) {
System.out.println("Removing " + driveLetter);
try {
Process p = Runtime.getRuntime()
.exec("\"" + TEMP_EJECT_PROGRAM.toString() + "\" " + driveLetter + " -L");
p.waitFor();
Scanner s = new Scanner(p.getInputStream());
while (s.hasNextLine())
System.out.println(s.nextLine());
s.close();
System.out.println("Removed " + driveLetter + ".");
} catch (IOException | InterruptedException e) {
e.printStackTrace();
}
}
}
}).start();
}
чтобы удалить диск. Куски кода выше определенно не подходят для всех приложений, и второй в perticular не самый лучший, есть и другие, намного лучшие способы сделать это, чем порождение анонимного потока ... Тем не менее, вы поймете, что за этим стоит :)
Наконец, я рекомендую вам соответствующим образом информировать пользователя и попросить его сконцентрироваться, прежде чем запускать какое-либо стороннее программное обеспечение на его компьютере ...
Надеюсь, это было полезно: -)