Java不需要调用任何系统调用或操作系统特定的函数来获取附加USB设备的名称吗?
我在这里可能只看到了6-7个问题,但每个人都提到了C++函数GetRawInputDeviceList()等,而且它们都不兼容跨平台。无论是用于C#或C++中的Windows,还是仅用于Linux。
但我在爪哇工作。此外,这需要跨平台。至少,它需要适用于Windows、Linux和Mac。我也可以使用终端/shell/命令提示符命令。我想我可以用Java运行它们。
我试过getFileSystemView和listRoots。但是他们给出了所有驱动器的名称dvd,hdd分区,软盘等。
我只需要买USB设备。
请不要提到jUSB或JSR080。为什么:
jUSB: 目前,访问USB设备需要将它们连接到GNU/Linux主机系统。
javax.usb: 前alpha Windows实现没有经过认证,需要内核驱动程序.
usb4java: 基本上,它只是用更多的抽象来实现JSR80,也许
尽管老实说,自从libusb在C++中出现以来,我还没有尝试过它。
如果您要提到API,请提到在Linux、Windows和Mac上工作的完全测试和尝试过的API。如果不是那样的话,我就不会提这个问题。我在许多其他帖子上看到过jUSB、javax.usb等。
发布于 2012-12-24 08:02:55
您可以在Linux上使用jUsb API接口。
或者您可以使用terminal类在Linux中启动Process,然后运行ls -la /dev/disk/by-id/usb-*并捕获stdout来了解结果。
对于Windows,您可以尝试如下:如何用PowerShell查找我的USB闪存驱动器的路径
编辑:
对于Windows,另一个有用的实用工具是devcon.exe。
有关更多信息,请访问这。
编辑2: For Mac,您可以使用Process类启动terminal,并运行system_profiler SPUSBDataType
发布于 2012-12-24 13:16:40
你可以试试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();
}
}
}编辑输出显示只有一个插入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,它不是工作(我只能找到一个窗口)。我没有从源代码编译库的Visual ):
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)发布于 2014-05-05 09:59:18
也许自从你第一次问这个问题以来,情况有所改善。我最近开始在Mac上探索usb4java,这似乎是可行的。对于低级(Libusb) API和高级(javax) API,都有可用的示例代码。
要列出所有USB设备,请查看示例。
我直接从usb4java.org下载了所有库,并从github下载了示例。我没有设法使maven构建正常工作,但我可以导入Eclipse中的库和示例并运行它们。
usb4java中包含了相同的本机代码,但是库将它们包装得非常漂亮,并隐藏了所有混乱的细节,只在需要时提取和部署本机代码。
https://stackoverflow.com/questions/14018693
复制相似问题