【问题标题】:Use intent to select files to read in android使用意图选择要在android中读取的文件
【发布时间】:2017-05-16 14:54:44
【问题描述】:

在android中使用intent选择要读取的文件 我使用意图来获取我选择的文件路径,如下所示:

Intent inputFile = new Intent(Intent.ACTION_PICK);
inputFile.setType("*/*");
inputFile.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(inputFile.createChooser(inputFile, "Select csv"),1010);

但是接收到的路径并没有使用 FileInputStream 来读取它。
例如:通过意图接收的路径是:/document/primary:File.csv
读取文件所需的路径是:/storage/emulated/0/File.csv

【问题讨论】:

  • 内容方案是uri.toString()。不要将 uri.toPath() 用于路径,因为它不是路径。要读取文件,只需打开一个输入流。 InputStream is = getContentResolver().openInputStream(data.getData());

标签: java android csv android-intent


【解决方案1】:

ACTION_PICK 不选择文件。它选择内容。大多数时候你会得到一个Uricontent 方案,并且不需要这是一个文件。

另请注意,ACTION_PICK 不使用 MIME 类型,并且确实需要 Uri 指向从何处进行选择。如果您想按 MIME 类型进行选择,或者选择任何内容,ACTION_GET_CONTENTACTION_OPEN_DOCUMENT 是更好的选择。这些也会给你一个content Uri 回。

如果你想要一个文件,要么:

  • 不要使用Intent,而是使用a file-chooser library

  • 正如 greenapps 建议的那样,使用 ContentResolveropenInputStream() 在内容上获取 InputStream,然后将该内容写入您控制的某个文件(例如,将字节复制到 FileOutputStream )

或者,直接使用InputStream

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多