2016-04-10 7 views
2

Интересно, если есть способ [теперь], чтобы написать мою Java программу, чтобы извлечь диск USB, я сделал некоторый поиск, и нашел следующий вопрос: How Do I Eject a Volume in Java?В Java как написать программу для извлечения USB-накопителя?

был задан вопрос 6 лет назад, без ответа, есть ли способ сделать это сейчас?

Мне нужно сделать это только в Windows, если что-то работает на Mac, это будет плюс.

+2

Не со стандартом библиотека. Вам, возможно, придется прибегать к хакерам на платформе. У вас была какая-то конкретная операционная система? – Joni

+0

В стандартной библиотеке времени выполнения нет обычной. Вам нужно будет попросить базовую операционную систему сделать это. –

+0

Вот несколько приложений командной строки Windows, для вызова этого вызова используйте Process.execute. http://stackoverflow.com/questions/206248/how-do-you-programmatically-eject-an-usb-mass-storage-device – Whome

ответ

0

Лил поздний ответ, но я думал, что стоит поделиться ... Поскольку по умолчанию Java API не приходит с этой функцией на нем, вы могли бы использовать внешние библиотеки, как упоминалось выше, однако я лично счел гораздо более удобным (для Windows) иметь сторонний exe-файл в пути класса jar, извлечь его в папку temp, выполнить его при необходимости, а затем удалить его после выполнения приложения с этим. В программе третьей партии я использовал this который является только 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(); 

} 

, чтобы удалить привод. Кусочки кода выше определенно не подходят для всех применений, а второй в перкуляте не самый большой, есть и другие гораздо лучшие способы сделать это, чем порождать анонимную нить ... Однако, тем не менее, у вас есть идея:

Наконец, я sugest вы сообщить пользователю надлежащим образом и попросить их ОБОГАЩЕНИЯ перед выполнением каких-либо стороннего программного обеспечения в своей машине ...

Я надеюсь, что это было полезно :-)