首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只需要得到连接到系统上的USB设备的名称?

只需要得到连接到系统上的USB设备的名称?
EN

Stack Overflow用户
提问于 2012-12-24 07:57:38
回答 3查看 18.1K关注 0票数 6

Java不需要调用任何系统调用或操作系统特定的函数来获取附加USB设备的名称吗?

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

但我在爪哇工作。此外,这需要跨平台。至少,它需要适用于Windows、Linux和Mac。我也可以使用终端/shell/命令提示符命令。我想我可以用Java运行它们。

我试过getFileSystemViewlistRoots。但是他们给出了所有驱动器的名称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等。

EN

回答 3

Stack Overflow用户

发布于 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

票数 4
EN

Stack Overflow用户

发布于 2012-12-24 13:16:40

你可以试试javahidapi。我想是一些c/c++代码和JNI。安装linux、mac和windows支持。我已经在linux ( ok )上尝试过了,虚拟盒中有干净的窗口(不是,UnsatisfiedLinkError,我认为错过了一些MSVS )。我相信,如果您要从源代码编译它,它应该可以工作。

下面是一个例子:

代码语言:javascript
复制
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设备,天才激光鼠标。

代码语言:javascript
复制
[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 ):

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2014-05-05 09:59:18

也许自从你第一次问这个问题以来,情况有所改善。我最近开始在Mac上探索usb4java,这似乎是可行的。对于低级(Libusb) API和高级(javax) API,都有可用的示例代码。

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

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

usb4java中包含了相同的本机代码,但是库将它们包装得非常漂亮,并隐藏了所有混乱的细节,只在需要时提取和部署本机代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14018693

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档