2017-06-25 38 views
1

我一直試圖在Linux中讀取其文件:檢測插入USB和使用Java

  1. 檢測現場安裝的USB記憶棒
  2. 讀它的文件。

使用usb4java,我能夠完成第1部分。但是usb4Java返回設備,我看不到如何訪問設備的文件。

這是允許的檢測代碼(你可以找到完整的例子: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

可以從Java調用Linux外殼命令。您想要獲得有關USB上的文件的信息,因此必須掛載,否則將無法輕鬆訪問文件系統結構。如果掛載你可以看到

Process p = Runtime.getRuntime().exec("ls /media/home/USB_mass_storage_name");即通過Java文件系統中/media/home/USB_mass_storage_name是掛載點

如果不安裝它,你必須從Java安裝USB(How to execute bash command with sudo privileges in Java?

Running system commands in Java applications是關於這方面的更多信息,也是一種從linux命令輸出讀取信息的方法回到java

2

對於讀取文件(第二部分),

1 - 首先閱讀的界面和端點你已經在做

getDeviceDescriptor(Device device, DeviceDescriptor descriptor) 

2的詳細信息 - 根據現有的端點,你就可以開始同步或異步傳輸讀取數據 -

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

請記住,usb4java在libusb之上工作。

usb4java例如 - link
usb4java API參考 - link
libusb的API參考 - link

+0

我也喜歡你的答案,但我接受ralf htp的一個,因爲它具有較少的依賴性並且更容易實現正在尋找。 – Majid

+0

當然馬吉德。很高興你得到了你的回覆。我更關注「讀取原始數據」,而不是「讀取已裝載的文件系統」,因爲您使用的是getDeviceDescriptor API,這給我的印象是想要使用USB傳輸讀取數據。 – Shaibal