如何在Java中访问USB端口

33

我想编写一个Java应用程序,访问USB端口,读取和写入通过USB连接的设备。然而,我不知道在Java中该使用什么来实现这样的功能。我在网络上搜索并找到了一个叫做JUSB的东西,但是所有的帖子似乎都比较旧。

目前,我正在使用RXTX库,但有时会遇到某些同步错误。当我使用C#进行等效操作时,代码量要少得多,并且我不会遇到同样的同步错误。

我的问题是,最新版的JRE中是否内置了可用于访问USB端口的内容并且与C#的等效代码一样容易)?

6个回答

27

我已经使用usb4java一年了,跨平台(Linux和Windows)都能很好地使用。

参考:

http://usb4java.org/

他们非常活跃,并拥有一个很好的javax USB前端。


14

在Java中没有与C#的USB支持相当的东西。 jUSB和Java-USB两者都严重过时,可能无法用于任何严肃的应用程序开发。

如果你想实现一个跨平台的USB应用程序,最好的选择是编写一个抽象的JNI接口,与Linux、Mac和Windows本地库进行通信,并且你必须自己编写这些库。我建议使用LibUSB来处理Mac和Linux。如你所见,Windows也比较简单。我刚刚完成了一年的项目,正是采用这种方法,不幸的是这是唯一可行的跨平台解决方案。如果你不需要在Windows上实现,并且你的需求有限,你可以使用其中一个旧的Java库(jUSB或Java-USB)。但是,任何需要在Win32 / Win64上部署的项目都需要一个本地组件。


usb4java怎么样?看起来是一个不错的选择。我与这个开发项目无关。 - Brethlosze

7

您可能想要了解usb4java - http://usb4java.org/index.html,它似乎支持Windows、Linux和Mac OS,并且在发布时看起来比较新。不幸的是,它是LGPL许可证,可能不适合商业开发。


2
如果你只在代码中使用LGPL库的API(并且你有非LGPL许可证),那么与LGPL库链接不应该是一个问题。GPL许可证的库是版权左翼许可证,无论你使用了什么许可证,都会强制你的代码许可证也成为GPL许可证。 - Joseph

7

5
Java-USB 只适用于 Linux 操作系统。如果你只需要在 Linux 上使用,这可能会起作用,尽管它似乎已经有一段时间没有更新了。 - Dave Sims

2

1
System.IO.Ports 用于串行通信,除非 OP 暗示了一个串口转 USB 接口?! - t0mm13b
同意 -- System.IO.Ports 没有 USB 接口,只适用于 Com 端口。 - Dave Sims
泰勒:你试过了吗?它真的有效吗? - t0mm13b
1
是的,我已经有一个每天都在使用的应用程序可以完成这个功能。这个USB设备是用于磁条卡编码器的。 - Taylor Leese
那么这是一根USB串口线?除非USB驱动程序使用串行仿真...有趣...以前从未听说过这个角度...我曾经使用过一个磁卡读卡器,它是一个串行接口,使用USB线缆...但它不起作用(驱动程序本身的限制加上线缆便宜)。 - t0mm13b
显示剩余2条评论

-2

如果您使用的是Mac电脑,可以通过/Volumes/目录访问USB设备。

例如:

如果您想要写入一个名为“Drive”的文件,那么文件路径应该是:

/Volumes/Drive/file.whatever

不确定其他平台如何实现,但这是我在Mac上找到的最简单的方法


1
只有驱动器可以被访问。但是还有很多其他的USB设备。 - btx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接