检测插入的 USB 并使用 java 在 linux 中读取其文件

Detect plugged usb and read its files in linux using java

我一直在努力:

  1. 检测到实时挂载的 U 盘
  2. 阅读它的文件。

使用 usb4java,我能够完成第 1 部分。但是 usb4Java returns 设备,我不知道如何访问设备的文件。

这是允许检测的代码(您可以在以下位置找到完整的示例:HotPlug example

public int processEvent(Context context, Device device, int event,
    Object userData) {
  DeviceDescriptor descriptor = new DeviceDescriptor();
  int result = LibUsb.getDeviceDescriptor(device, descriptor);
  if (result != LibUsb.SUCCESS) {
    throw new LibUsbException("Unable to read device descriptor",
        result);
  }
  System.out.format("%s: %04x:%04x%n",
      event == LibUsb.HOTPLUG_EVENT_DEVICE_ARRIVED ? "Connected" :
          "Disconnected",
      descriptor.idVendor(), descriptor.idProduct());
  return 0;
}

用于读取文件(第 2 部分),

1 - 首先阅读您已经在做的接口和端点详细信息

getDeviceDescriptor(Device device, DeviceDescriptor descriptor)

2 - 根据可用端点,您可以启动同步或异步传输来读取数据 -

public static int controlTransfer(DeviceHandle handle, ...)  
public static int bulkTransfer(DeviceHandle handle, ...)

请记住,usb4java 在 libusb 之上工作。

usb4java example - link
usb4java API reference - link
libusb API reference - link

您可以从 java 调用 linux shell 命令。您想获取有关 USB 上文件的信息,因此必须挂载它,否则将无法轻松访问文件系统结构。如果它是自动挂载的,你可以通过 java 查看文件系统,即

Process p = Runtime.getRuntime().exec("ls /media/home/USB_mass_storage_name"); 其中 /media/home/USB_mass_storage_name 是挂载点

如果未安装,则必须从 java ( How to execute bash command with sudo privileges in Java? )

安装 USB

in Running system commands in Java applications 是关于此的更多信息,也是一种将信息从 linux 命令输出读回 java

的方法