Mtoypc
Mtoypc

Reputation: 494

Read .txt file from anywhere on the phone

In my app I have this code allowing the user to select a file :

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("text/plain");
startActivityForResult(intent,1);

The user can select the .txt file from anywhere in his phone, even from google drive. When the file selection is done I retrieve a Uri object corresponding to the file. The problem is I can't use this Uri to read the file because it is not valid. Here is my code :

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            if (requestCode == 1) {
                if (resultCode == RESULT_OK) {
                    Uri uri = data.getData();

                    File file = new File(uri.toString());

                    try{
                        InputStream inputStream = new FileInputStream(file);
                        int content;
                        while ((content = inputStream.read()) != -1) {
                            Log.d("===>", String.valueOf((char) content));
                        }
                    }catch (Exception e){
                        Log.d("===>", e.toString());
                    }

                }
            }
        }

I always get a fileNotFoundException. My question is, is there a way to read the selected file (without knowing in advance the location it will come from). And if not, is there a way to copy the selected file in a folder from which I would easily get it ?

Upvotes: 2

Views: 107

Answers (1)

CommonsWare
CommonsWare

Reputation: 1006644

The problem is I can't use this Uri to read the file because it is not valid.

That is because a Uri is not a file.

is there a way to read the selected file (without knowing in advance the location it will come from)

The user did not select a file. The user selected a piece of content.

To consume the content represented by the Uri, call openInputStream() on a ContentResolver, passing in the Uri. This gives you an InputStream that you can use to read in the content.

Upvotes: 3

Related Questions