【发布时间】:2014-05-05 17:59:18
【问题描述】:
Java 是否可以调用任何系统调用或特定于操作系统的函数来获取所连接的 USB 设备的名称?
我在这里只看到了大概 6-7 个问题,但每个人都提到了 C++ 函数GetRawInputDeviceList() 等,它们不兼容跨平台。适用于 C# 或 C++ 中的 Windows 或仅适用于 Linux。
但我正在使用 Java。此外,这需要跨平台。 至少,它需要适用于 Windows、Linux 和 Mac。我也可以使用终端/shell/命令提示符命令。我想我可以用 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,它们可以在 Linux、Windows 和 Mac 上运行。 如果不是这样,我不会提出这个问题。我在许多其他帖子中看到过提到 jUSB、javax.usb 等。
【问题讨论】:
-
你自己试过了吗?曾经跨平台吗?如果你们这么用力,那我今天就试试。
-
澄清一件事:javax.usb(JSR80)只是一个标准的API(就像Tomcat实现的Servlet API)。 usb4java 与您提到的非常古老的参考实现无关,即“pre-alpha Windows 实现”。 usb4java 只是实现了 javax.usb API 并使用 libusb 作为后端。但这对你来说并不有趣,因为即使没有 Java,libusb 库也无法为你提供 USB 设备名称,因为在 Windows 上,它还需要一个特殊的驱动程序来处理你想要与之通信的所有设备。