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é.
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 */ }
}
}
}