只是获取连接到系统的USB设备的名称?

Java是否可以调用任何系统调用或操作系统特定的函数来获取所连接的USB设备的名称?

我在这里只看到了6到7个问题,但每个人都提到了C ++函数GetRawInputDeviceList()等,它们不是跨平台兼容的。 适用于C#或C ++中的Windows或仅适用于Linux。

但我在Java工作。 此外,这需要跨平台。 至少,它需要适用于Windows,Linux和Mac。 我也可以使用terminal / shell / command-prompt命令。 我想我可以用Java运行它们。

我试过getFileSystemViewlistRoots 。 但是他们给出了所有驱动器的名称[dvd,hdd分区,软盘等]。

我只需要USB设备。

请不要提及jUSB或JSR080。 为什么:

jUSB: 访问USB设备目前要求它们连接到GNU / Linux主机系统

javax.usb: pre-alpha Windows实现未经过认证,需要内核驱动程序。

usb4java: 基本上,它只是实现了JSR80,可能只有更多的抽象

虽然老实说我还没有尝试过libusb,因为它是用C ++编写的。

如果您要提及API,请提及完全经过测试和尝试过的API,这些API可以在Linux,Windows和Mac上运行。 如果不是这样,我就不会提出这个问题。 我在很多其他post上看到了jUSB,javax.usb等的提及。

您可以使用适用于Linux的jUsb API 。

或者您可以使用Process类在Linux中启动terminal ,并运行ls -la /dev/disk/by-id/usb-*并捕获stdout以了解结果。

对于Windows,您可以尝试: 如何使用PowerShell查找USB闪存驱动器的路径

编辑:

对于Windows,另一个有用的实用程序是devcon.exe

有关详细信息,请检查此信息。

编辑2:对于Mac,您可以使用Process类启动terminal ,并运行system_profiler SPUSBDataType

你可以试试javahidapi 。 我认为它是一些c / c ++代码和JNI。 声明了linux,mac和windows支持。 我已经尝试过使用linux(ok),在虚拟框中使用干净的窗口(不好,UnsatisfiedLinkError,我认为错过了一些MSVS库)。 如果你将从源代码编译它,它应该工作,我相信。

这是一个例子:

 import com.codeminders.hidapi.HIDDeviceInfo; import com.codeminders.hidapi.HIDManager; public class TestHid { public static void main(String[] args) throws Exception { try { com.codeminders.hidapi.ClassPathLibraryLoader.loadNativeHIDLibrary(); HIDManager hidManager = HIDManager.getInstance(); HIDDeviceInfo[] infos = hidManager.listDevices(); for (HIDDeviceInfo info : infos) { System.out.println("info: " + info.toString()); } } catch (Exception ex) { ex.printStackTrace(); } } } 

EDIT输出显示只有一个插入usb设备,天才激光鼠标。

 [grigory@gr testRSA]$ pwd /home/grigory/testRSA/out/production/testRSA [grigory@gr testRSA]$ whoami grigory [grigory@gr testRSA]$ java -cp ".:hidapi-1.1.jar" Test libusb couldn't open USB device /dev/bus/usb/003/002: Permission denied. libusb requires write access to USB device nodes. info:HIDDeviceInfo [path=0003:0002:00, vendor_id=1112, product_id=58, serial_number=null, release_number=0, manufacturer_string=null, product_string=null, usage_page=0, usage=0, interface_number=0] [grigory@gr testRSA]$ sudo java -cp ".:hidapi-1.1.jar" Test [sudo] password for grigory: info:HIDDeviceInfo [path=0003:0002:00, vendor_id=1112, product_id=58, serial_number=null, release_number=0, manufacturer_string=Genius, product_string=Laser Mouse, usage_page=0, usage=0, interface_number=0] [grigory@gr testRSA]$ 

对于新的Windows XP,它不起作用(我只能找到一个窗口。我没有从源代码编译lib的Visual Studio):

 E:\testRSA\out\production\testRSA>java -cp ".;hidapi-1.1.jar" -Djava.library.pat h="e:\testRSA\out\production\testRSA" Test Exception in thread "main" java.lang.UnsatisfiedLinkError: com.codeminders.hidap i.HIDManager.init()V at com.codeminders.hidapi.HIDManager.init(Native Method) at com.codeminders.hidapi.HIDManager.(HIDManager.java:53) at com.codeminders.hidapi.HIDManager.getInstance(HIDManager.java:121) at Test.main(Test.java:14) 

自从你第一次提出这个问题以来,事情就好了。 我最近开始在Mac上探索usb4java ,它似乎有效。 有一些示例代码可用于低级(类libusb)API和高级(javax)API。

要列出所有USB设备,请查看示例 。

我直接从usb4java.org下载了所有库,并从github下载了这些例子。 我没有设法让maven构建工作,但我可以在Eclipse中导入库和示例并运行它们。

usb4java中包含相同的本机代码,但是库将它们完美地包装起来并隐藏所有杂乱的细节,仅在需要时提取和部署本机代码。