Android - 从意图选择器中打开 txt 文件

Nik*_*ola 5 android filenotfoundexception android-intent onactivityresult

通过单击某个按钮 - 创建选择 txt 文件的意图:

Intent intent = new Intent()
                    .setType("text/plain")
                    .setAction(Intent.ACTION_GET_CONTENT);
            startActivityForResult(Intent.createChooser(intent, "Select a TXT file"), 123);
Run Code Online (Sandbox Code Playgroud)

它工作正常 - 我从手机内存上的根文件夹中选择 txt 文件 --- /storage/emulated/0/kote.txt

但是当我尝试从中读取数据时,我得到 FileNotFoundException:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    super.onActivityResult(requestCode, resultCode, intent);
    if(requestCode==123 && resultCode==RESULT_OK) {
        Uri selectedfile_uri = intent.getData();
        Log.e("TAG7", "selectedfile_uri ---   " + selectedfile_uri );

        File myFile_test1 = new File(selectedfile_uri.getPath());
        Log.e("TAG7", myFile_test1.getPath() + "     .exists() "+myFile_test1.exists());

        File myFile_test2 = new File(selectedfile_uri.getEncodedPath());
        Log.e("TAG7", myFile_test2.getPath() + "     .exists() "+myFile_test2.exists());

        function_read_txt_file(myFile_test1); //returns FileNotFoundException
        function_read_txt_file(myFile_test2); //returns FileNotFoundException
    }
}
Run Code Online (Sandbox Code Playgroud)

日志猫:

E/TAG7: selectedfile_uri ---   content://com.android.externalstorage.documents/document/primary%3Akote.txt
E/TAG7: /document/primary:kote.txt     .exists() false
E/TAG7: /document/primary%3Akote.txt     .exists() false
E/TAG7: FileNotFoundException
Run Code Online (Sandbox Code Playgroud)

我在这里缺少什么?干杯

Nab*_*ari 4

Uri可能没有直接访问您的文件的路径。InputStream您应该通过从以下位置打开该文件Uri

Uri selectedfile_uri = intent.getData();
InputStream inputStream = getContentResolver().openInputStream()
Run Code Online (Sandbox Code Playgroud)