0

I am trying to open and read file that was been saved either on the sdCard or on the google drive or on the internal memory by using the android file chooser ...

after I successfully chosen the file and I get the file path as shown on the following code when I try to read it it keeps throwing me the that the file does not exist / no such file or directory ....

my code:

    public class MainActivity extends AppCompatActivity {

    private static final int CHOOSE_FILE_REQUEST_CODE = 1;
    String[] ids;
    TextView textView;
    Button btnImport;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        textView = (TextView) findViewById(R.id.text_view);


        btnImport = (Button) findViewById(R.id.btn_import);

        btnImport.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
                intent.addCategory(Intent.CATEGORY_OPENABLE);
                intent.setType("*/*");
                Intent i = Intent.createChooser(intent, "File");
                startActivityForResult(i, CHOOSE_FILE_REQUEST_CODE);

            }
        });



    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (data == null) {
            return;
        }
        switch (requestCode) {
            case 1:
                if (resultCode == RESULT_OK) {
                    String path = data.getData().getPath();
                    String url = data.getData().getPath();
                    File file = new File(url);
                    Log.i("***", path);
                   // InputStream inputStream = getResources().openRawResource(R.raw.sample);
                    InputStream inputStream = null ;
                    BufferedReader bufferedReader = null;

                    try {
                        inputStream = new FileInputStream(file);
                        bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
                        String csvLine;
                        StringBuffer stringBuffer = new StringBuffer();

                        while ((csvLine = bufferedReader.readLine()) != null) {

                            ids = csvLine.split(",");

                            for (int i = 0; i < ids.length; i++) {
                                if (i % 19 == 1) {
                                    stringBuffer.append(ids[i]);

                                    stringBuffer.append("\n");
                                    Log.i("***", stringBuffer.toString());

                                }
                                textView.setText(stringBuffer.toString());
                            }
                        }


                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }

                }
        }
    }
}

this is the logs :

10-29 11:05:48.080 14716-14716/com.example.ndrzhr.readcsv02 W/System.err: java.io.FileNotFoundException: /document/E896-1C04:Download/39196035.doc: open failed: ENOENT (No such file or directory)
 10-29 11:05:48.080 14716-14716/com.example.ndrzhr.readcsv02 W/System.err:     at libcore.io.IoBridge.open(IoBridge.java:452)
 10-29 11:05:48.080 14716-14716/com.example.ndrzhr.readcsv02 W/System.err:     at java.io.FileInputStream.<init>(FileInputStream.java:76)
 10-29 11:05:48.080 14716-14716/com.example.ndrzhr.readcsv02 W/System.err:     at com.example.ndrzhr.readcsv02.MainActivity$override.onActivityResult(MainActivity.java:69)
 10-29 11:05:48.080 14716-14716/com.example.ndrzhr.readcsv02 W/System.err:     at com.example.ndrzhr.readcsv02.MainActivity$override.access$dispatch(MainActivity.java)
 10-29 11:05:48.080 14716-14716/com.example.ndrzhr.readcsv02 W/System.err:     at com.example.ndrzhr.readcsv02.MainActivity.onActivityResult(MainActivity.java:0)
 10-29 11:05:48.080 14716-14716/com.example.ndrzhr.readcsv02 W/System.err:     at android.app.Activity.dispatchActivityResult(Activity.java:7137)
 10-29 11:05:48.080 14716-14716/com.example.ndrzhr.readcsv02 W/System.err:     at android.app.ActivityThread.deliverResults(ActivityThread.java:4916)
 10-29 11:05:48.080 14716-14716/com.example.ndrzhr.readcsv02 W/System.err:     at android.app.ActivityThread.handleSendResult(ActivityThread.java:4963)
 10-29 11:05:48.080 14716-14716/com.example.ndrzhr.readcsv02 W/System.err:     at android.app.ActivityThread.access$1600(ActivityThread.java:221)
 10-29 11:05:48.080 14716-14716/com.example.ndrzhr.readcsv02 W/System.err:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1848)
 10-29 11:05:48.080 14716-14716/com.example.ndrzhr.readcsv02 W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:102)
 10-29 11:05:48.080 14716-14716/com.example.ndrzhr.readcsv02 W/System.err:     at android.os.Looper.loop(Looper.java:158)
 10-29 11:05:48.080 14716-14716/com.example.ndrzhr.readcsv02 W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:7224)
 10-29 11:05:48.080 14716-14716/com.example.ndrzhr.readcsv02 W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
 10-29 11:05:48.080 14716-14716/com.example.ndrzhr.readcsv02 W/System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
 10-29 11:05:48.080 14716-14716/com.example.ndrzhr.readcsv02 W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
 10-29 11:05:48.080 14716-14716/com.example.ndrzhr.readcsv02 W/System.err: Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory)
 10-29 11:05:48.080 14716-14716/com.example.ndrzhr.readcsv02 W/System.err:     at libcore.io.Posix.open(Native Method)
 10-29 11:05:48.080 14716-14716/com.example.ndrzhr.readcsv02 W/System.err:     at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)
 10-29 11:05:48.080 14716-14716/com.example.ndrzhr.readcsv02 W/System.err:     at libcore.io.IoBridge.open(IoBridge.java:438)
 10-29 11:05:48.080 14716-14716/com.example.ndrzhr.readcsv02 W/System.err:  ... 15 more
 10-29 11:05:48.130 14716-14716/com.example.ndrzhr.readcsv02 I/Timeline: Timeline: Activity_idle id: android.os.BinderProxy@7501f3b time:713512721
 10-29 11:15:48.520 14716-14716/com.example.ndrzhr.readcsv02 V/ActivityThread: updateVisibility : ActivityRecord{5091c6e token=android.os.BinderProxy@7501f3b {com.example.ndrzhr.readcsv02/com.example.ndrzhr.readcsv02.MainActivity}} show : true

I edited some of my code but still getting this

10-29 12:43:27.360 19779-19779/com.example.ndrzhr.readcsv02 W/System.err: java.io.FileNotFoundException: content:/com.android.externalstorage.documents/document/primary%3ADownload%2FUntitled%20document.txt: open failed: ENOENT (No such file or directory)

for this :

    if (resultCode == RESULT_OK) {
        Uri uri = data.getData();
        String type = data.getType();
        Log.i("***", "Pick completed: " + uri + " " + type);
        if (uri != null) {
            String path = uri.toString();

            FileReader fileReader = null;
            BufferedReader bufferedReader = null;

            try {
                //inputStream = new FileInputStream(file);
                fileReader = new FileReader(path);
                bufferedReader = new BufferedReader(fileReader);
                String csvLine;
                StringBuffer stringBuffer = new StringBuffer();

                while ((csvLine = bufferedReader.readLine()) != null) {
                    ids = csvLine.split(",");
                    for (int i = 0; i < ids.length; i++) {
                        if (i % 19 == 1) {
                            stringBuffer.append(ids[i]);

                            stringBuffer.append("\n");
                            Log.i("***", stringBuffer.toString());
                            textView.setText(stringBuffer.toString());

                        }

                    }
                }


            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    }
}
ndrzhr
  • 21
  • 1
  • 5
  • tis could have so many reasons, please add the error log to your question. It´s possible that you don´t have add the permissions (runtime in MM and above), the file path is wrong, or, for example if you have cyanogenmod installed, the directory is not mounted... – Opiatefuchs Oct 29 '16 at 08:31
  • Thank you for the quick response ... I did added the permissions , the file path is the one that I got from the indent data callback .String path = data.getData().getPath(); – ndrzhr Oct 29 '16 at 08:45
  • You should have mentioned the exact path of course. `/document/E896-1C04:Download/39196035.doc` deliveted by `uri.getPath()`. Well that is not a file system path to begin with. Please post the value of `uri.toString()` as you will need that. – greenapps Oct 29 '16 at 09:41

1 Answers1

1

Open an InputStream for the choosen uri content scheme in the rigth way:

InputStream is = getContentResolver().openInputStream(data.getData());
greenapps
  • 11,154
  • 2
  • 16
  • 19