2016-04-10 1 views
2

Je me demande s'il y a un moyen [maintenant] pour écrire mon programme Java pour éjecter une clé USB, je l'ai fait quelques recherches et trouvé la question suivante: How Do I Eject a Volume in Java?En Java comment écrire le programme pour éjecter une clé USB?

Il a été demandé il y a 6 ans, sans réponse, Y a-t-il un moyen de le faire maintenant?

J'ai seulement besoin de le faire sous Windows, si quelque chose fonctionne sur Mac, ce sera un plus.

+2

pas avec la norme bibliothèque. Vous devrez peut-être recourir à des hacks spécifiques à la plate-forme. Aviez-vous un système d'exploitation particulier en tête? – Joni

+0

Il n'y a pas de routine dans la bibliothèque d'exécution standard. Vous devrez demander au système d'exploitation sous-jacent de le faire. –

+0

Voici quelques applications de ligne de commande Windows, utilisez Process.execute pour l'appeler. http://stackoverflow.com/questions/206248/how-do-you-programmatically-eject-an-usb-mass-storage-device – Whome

Répondre

0

Une réponse Litle en retard, mais je pensais qu'il était utile de partager ... Depuis le défaut de l'API Java ne vient pas avec cette fonction, vous pouvez utiliser bibliothèques externes comme mentionné ci-dessus, cependant j'ai personnellement trouvé beaucoup plus pratique (pour windows) d'avoir un fichier exe tiers dans le classpath du jar, l'extraire dans le dossier temp, l'exécuter si nécessaire et le retirer une fois l'application terminée avec ça. En tant que programme tiers i utilisé this qui est un CLI seul programme qui peut faire quelques tours avec des appareils connectés, puis utilisé ce code:

FileUtils.copyInputStreamToFile(MyClass.class.getClassLoader().getResourceAsStream(program),TEMP_EJECT_PROGRAM); 

à exporter vers l'emplacement du fichier temporaire (à l'aide ApacheIO, vous pouvez certainement faire sans elle), et ce code:

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(); 

} 

pour retirer le lecteur. Les morceaux de code ci-dessus ne sont certainement pas adaptés à toutes les applications et le second en particulier n'est pas le meilleur, il y a d'autres façons de le faire que de générer un thread anonyme ... Pourtant, vous avez l'idée :)

Enfin, je vous conseille de informiez l'utilisateur de manière appropriée et demander leur concent avant d'exécuter un logiciel tiers dans leur machine ...

J'espère que cela a été utile :-)