2017-06-09 153 views
-2

如何檢測USB設備插入和退出(類型的監聽)與Java?
不只是一個pendrive,它也可能是一臺掃描儀或打印機。用Java檢測USB設備插入和拔出(類型的偵聽)?不只是pendrives

我試過jUSB,但它沒用。
USB Java庫會更多,因爲我只需要使用它。

我需要在我的代碼中包含這些行,以便可以通知插入和插入的設備。

+0

您可能意味着#javapos(https://stackoverflow.com/tags/javapos/info),而不是#jpos(HTTPS的://計算器。 COM /標籤/初級專業人員/信息)。 jpos是一個不涉及POS硬件的服務器端iso8583框架。你可能想要更改你的標籤,這樣你就可以從合適的人獲得幫助 –

回答

0

Java中的USB支持僅限於第三方庫。我沒有使用任何這些,但你可以嘗試JUSB

如果你不能通過USB庫找到一個解決方案,你總是可以做一些bodge作業,並通過所有可能的驅動器字母循環創建一個File對象爲每個人和測試,看看你是否可以從中讀取。如果插入USB存儲設備,先前失敗的驅動器盤符現在會通過,因此您會知道您有新設備。當然,你不知道它是什麼類型的設備(即它可能是CD/DVD)。但正如我所說,這不是一個理想的解決方案。

這裏有一個敲起來實用程序來證明這一點

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

看看這也可以幫助你... https://javacircles.wordpress.com/2011/07/20/java-code-to-檢測-USB端口筆驅動器和顯示其內容/ –

+0

嗨Vikas,非常感謝您的答覆。但我的情況是不檢測存儲設備。我需要編寫代碼來通知其他非存儲USB設備(如鼠標或打印機)的插頭活動。 –