Détecter un périphérique USB plug in et out (type d'écoute) avec Java? Pas seulement des pendrives


Comment puis-je détecter une prise et une sortie de périphérique USB (type d'écoute) avec Java?
Pas seulement une clé usb, il pourrait être un scanner ou une imprimante trop.

J'ai essayé jUSB, mais ça ne sert à rien.
La bibliothèque Java USB serait plus puisque je dois en utiliser juste un peu.

Je dois inclure les lignes dans mon code afin que l'appareil branché et branché puisse être notifié.

Author: Gnanadeep Grandha, 2017-06-09

1 answers

La prise en charge USB en Java est limitée aux bibliothèques tierces. Je n'ai utilisé aucun de ces éléments mais vous pouvez essayer JUSB

Si vous ne trouvez pas de solution via une bibliothèque USB, vous pouvez toujours faire un peu de travail de carrosserie et parcourir toutes les lettres de lecteur probables en créant un objet Fichier pour chacune et en testant si vous pouvez en lire. Si un périphérique de mémoire USB est branché, une lettre de lecteur qui a échoué auparavant passerait maintenant et vous sauriez que vous avez un nouveau périphérique. Bien sûr, vous n'avez pas sachez de quel type d'appareil il s'agit (c'est-à-dire qu'il pourrait s'agir d'un CD/DVD). Mais comme je l'ai dit ce n'est pas une solution idéale.

Voici un utilitaire pour prouver le point

import java.io.*;

/**
* Waits for USB devices to be plugged in/unplugged and outputs a message
*/
public class FindDrive
{
/**
* Application Entry Point
*/
public static void main(String[] args)
{
String[] letters = new String[]{ "A", "B", "C", "D", "E", "F", "G", "H", "I"};
File[] drives = new File[letters.length];
boolean[] isDrive = new boolean[letters.length];

// init the file objects and the initial drive state
for ( int i = 0; i < letters.length; ++i )
    {
    drives[i] = new File(letters[i]+":/");

    isDrive[i] = drives[i].canRead();
    }

 System.out.println("FindDrive: waiting for devices...");

 // loop indefinitely
 while(true)
    {
    // check each drive 
    for ( int i = 0; i < letters.length; ++i )
        {
        boolean pluggedIn = drives[i].canRead();

        // if the state has changed output a message
        if ( pluggedIn != isDrive[i] )
            {
            if ( pluggedIn )
                System.out.println("Drive "+letters[i]+" has been plugged in");
            else
                System.out.println("Drive "+letters[i]+" has been unplugged");

            isDrive[i] = pluggedIn;
            }
        }

    // wait before looping
    try { Thread.sleep(100); }
    catch (InterruptedException e) { /* do nothing */ }

    }
 }
}
 0
Author: Vikas Suryawanshi, 2017-06-09 09:29:38