从usb可移动存储中读取文件

时间:2017-04-18 07:08:05

标签: android usb usb-otg

在我的应用程序中我想从usb可移动存储中读取一个文件 我有一个.txt,我想读它

void read() {
UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
HashMap<String, UsbDevice> deviceList = manager.getDeviceList();
Iterator<UsbDevice> deviceIterator = deviceList.values().iterator();
StringBuffer sb = new StringBuffer();
while (deviceIterator.hasNext()) {
    UsbDevice device = deviceIterator.next();
    String Model = device.getDeviceName();

    try {
        File file = new File(Model + "/a.txt");
        if (file.exists())
            Toast.makeText(getApplicationContext(), "Exist", Toast.LENGTH_LONG).show();
        else
            Toast.makeText(getApplicationContext(), "Not Exist", Toast.LENGTH_LONG).show();

        BufferedReader br = new BufferedReader(new FileReader(Model + "/a.txt"));
        String sCurrentLine;

        while ((sCurrentLine = br.readLine()) != null) {
            textView.append(sCurrentLine + "\n");
        }

    } catch (Exception e) {
        e.printStackTrace();
        Toast.makeText(getApplicationContext(), e.toString(), Toast.LENGTH_LONG).show();
    }
}
}

当检查文件存在时返回false并且打开和读取文件时抛出异常

java.io.filenotfoundexception :/dev/bus/001/002/a.txt: opent failed : EACCES (permission denied)

中的

<uses-permission android:name="android.permission.USB_PERMISSION" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_MEDIA_STORAGE" />

3 个答案:

答案 0 :(得分:0)

如果你在棒棒糖上或上面运行,你需要在java代码中询问权限。 看看这个链接https://stackoverflow.com/a/33162451/7457753

答案 1 :(得分:0)

/dev/bus/001/002/a.txt. 

这是一个不可能的非exrisnd文件系统路径。哪个文件:exists()已经告诉过你。您应该返回然后停止使用您的代码。现在你继续好像什么也没发生过。

您最好询问或搜索“如何确定usb笔式驱动器的路径”。

好好看看getExternalFilesDirs()返回的第二或第三项。

您确定您的设备支持OTG吗?

答案 2 :(得分:0)

这个解决方案都不适合我 我搜索并找到了这个库

Open source library to access USB Mass Storage devices on Android without rooting your device

测试并为我工作