是否有任何系统调用或操作系统特定的功能可以被Java调用以获取所连接的USB设备的名称?
我在这里只看到了6到7个问题,但每个人都提到了C ++函数GetRawInputDeviceList()
等,而且它们不符合跨平台的要求。适用于C#或C ++中的Windows或仅适用于Linux。
但我在Java工作。此外,这需要跨平台。 至少,它需要适用于Windows,Linux和Mac。我也可以使用terminal / shell / command-prompt命令。我想我可以用Java运行它们。
我已尝试getFileSystemView
和listRoots
。但是它们给出了所有驱动器的名称[dvd,hdd分区,软盘等]。
我只需要USB设备。
请不要提及jUSB或JSR080。原因:
jUSB: access to USB devices currently requires that they be connected to a GNU/Linux host system
javax.usb: pre-alpha Windows implementation is not certified and requires a kernel driver.
usb4java: basically, it just implements JSR80 with little more abstraction, perhaps
虽然老实说我没有尝试过libusb,因为它是用C ++编写的。
如果您要提及API,请提及完全经过测试和尝试过的API,这些API可以在Linux,Windows和Mac上运行。 如果情况并非如此,我不会提出这个问题。我在很多其他帖子上看到了jUSB,javax.usb等的提及。
答案 0 :(得分:4)
对于Linux,您可以使用jUsb
API。
或者您可以使用terminal
类在Linux中启动Process
,然后运行
ls -la /dev/disk/by-id/usb-*
并抓住stdout
以了解结果。
对于Windows,您可以尝试:How to find my USB flash drive's path with PowerShell
修改强>
对于Windows,另一个有用的实用程序是devcon.exe
。
有关详情,请查看this.
编辑2:
对于Mac,您可以使用terminal
类启动Process
,然后运行system_profiler SPUSBDataType
答案 1 :(得分:2)
Yoy可以试试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.<init>(HIDManager.java:53)
at com.codeminders.hidapi.HIDManager.getInstance(HIDManager.java:121)
at Test.main(Test.java:14)
答案 2 :(得分:0)