Как извлечь том в Java? - PullRequest
4 голосов
/ 26 июня 2009

Как я могу "извлечь" том с помощью Java, кросс-платформенный?

У меня есть программа, которая выполняет некоторые операции на съемном носителе (USB-устройстве чтения карт памяти), и после того, как это будет сделано, я хочу, чтобы программа извлекла / размонтировала / удалила (в зависимости от того, на каком языке мы говорим) память карта.

Есть ли надежный кроссплатформенный метод для этого?

Ответы [ 2 ]

2 голосов
/ 26 июня 2009

Возможно, это не тот ответ, который вы ищете, но ...

номер

Насколько мне известно, не существует установленного одноплатформенного способа сделать это. В этом отношении я никогда не сталкивался с Java-способом сделать это. довольно страшный C # CodeProject разрешает извлечение устройств, но только в Windows.

различные , удручающе бедные , библиотеки Java USB даже не намекают на извлечение устройств. Они не работают на всех платформах, поэтому даже если бы они это сделали, это не помогло бы вам.

Мое предложение: создайте несколько скриптов или исполняемых файлов для каждой платформы, а затем просто раскрутите процесс по мере необходимости.

0 голосов
/ 26 июня 2017

Немного поздний ответ, но я думал, что стоит поделиться ... Поскольку 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 не самый лучший, есть и другие, намного лучшие способы сделать это, чем порождение анонимного потока ... Тем не менее, вы поймете, что за этим стоит :)

Наконец, я рекомендую вам соответствующим образом информировать пользователя и попросить его сконцентрироваться, прежде чем запускать какое-либо стороннее программное обеспечение на его компьютере ...

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

...