Java 使用意图选择要在android中读取的文件

Java 使用意图选择要在android中读取的文件,java,android,csv,android-intent,Java,Android,Csv,Android Intent,使用意图选择要在android中读取的文件 我使用intent获取我选择的文件路径,如下所示: Intent inputFile = new Intent(Intent.ACTION_PICK); inputFile.setType("*/*"); inputFile.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(inputFile.createChooser(inputFile, "Select csv"),1010)

使用意图选择要在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来读取它。
例如:通过intent接收的路径是:/document/primary:File.csv

读取文件所需的路径是:/storage/emulated/0/file.csv

操作\u PICK
不拾取文件。它挑选内容。大多数时候,您会得到一个带有
内容
方案的
Uri
,并且不要求这是一个文件

还要注意的是,
ACTION\u PICK
不使用MIME类型,需要一个
Uri
来指明从何处拾取。如果您想按MIME类型选择,或选择任何内容,
ACTION\u GET\u CONTENT
ACTION\u OPEN\u DOCUMENT
是更好的选择。这些也会给你一个
内容
Uri
返回

如果需要文件,请执行以下任一操作:

  • 不要使用
    意图
    ,而是使用

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


或者,直接使用
InputStream

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