我正在尝试编写一个访问usb端口的java应用程序来读取和写入通过usb连接的设备。我面临的问题是我不知道在java中使用什么来做这样的事情。我在网上搜索并找到了一个叫JUSB
的东西,但所有的帖子看起来都很旧了。
目前我正在使用RXTX
库,但有时会遇到一些同步错误。当我使用C#做相同的操作时,它需要的代码少得多,而且我不会遇到任何相同的同步错误。
我的问题是,我可以使用最新版本的JRE内置任何内容来访问USB端口(就像等效的C#代码一样简单)?
答案 0 :(得分:22)
答案 1 :(得分:14)
在Java中没有任何东西等同于C#的USB支持。 jUSB和Java-USB都严重过时,可能无法用于任何严肃的应用程序开发。
如果您想要实现跨平台的USB应用程序,最好的办法是编写一个抽象的JNI界面,该界面与您自己必须编写的Linux,Mac和Windows本机库相对应。我会看LibUSB来处理Mac和Linux。正如您所见,Windows非常简单。我刚刚完成了为期一年的项目,不幸的是,这是唯一一个严肃的跨平台解决方案。如果您不必在Windows上实现并且您的需求有限,那么您可能会使用其中一个较旧的Java库(jUSB或Java-USB)。任何需要在Win32 / Win64上部署的东西都需要本机组件。
答案 2 :(得分:7)
答案 3 :(得分:7)
您可能希望查看usb4java - http://usb4java.org/index.html它似乎支持Windows,Linux和Mac OS,并且在发布时似乎是合理的。不幸的是,LGPL可能不适合商业开发。
答案 4 :(得分:3)
Java Communications API。这应该提供与C#System.IO.Ports命名空间类似的功能。
答案 5 :(得分:-2)
如果您使用的是Mac,则可以通过/ Volumes /目录访问USB。
示例:
您要写入“驱动器”中的文件,因此文件路径为:
#include <iostream>
#include <string>
#include <algorithm>
int main()
{
std::string s;
std::cin >> s;
std::string o ="ob";
for (char& v: s)
{
if (v == 'a' || v=='e' || v == 'i' || v == 'o' || v == 'u')
s = s.insert(s.find(v),o);
}
std::cout << s << std::endl;
}
不确定在其他平台上如何完成此操作,但这是我在Mac上找到的最简单的方法