Java 使用意图选择要在android中读取的文件
使用意图选择要在android中读取的文件 我使用intent获取我选择的文件路径,如下所示: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)
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())代码>