ENOENT (No such file or directory) When There Is A File There

16,689

Solution 1

The getFilesDir() is private to that specific app (i.e., other apps cannot read it) as explained in openFileOutput (which is the same directory getFilesDir returns as per its documentation).

If you are attempting to share files across applications, you follow the Sharing Files training guide to ensure that other applications can access your files.

Solution 2

In your save code you have:

String fileName = getFilesDir()+"/wifiqr/" + "QRCode.png";

In your load code you have no leading slash before "wifiqr/":

File file = new File(getFilesDir()+"wifiqr/", "QRCode.png");

It seems you meant to put a "/" before "wifiqr/" in your load code. Your save code implies that getFilesDir() may not already have a trailing slash on it.

The name of the file it is trying to open is even printed in your log:

/data/data/com.frostbytedev.wifiqr/fileswifiqr/QRCode.png

It doesn't seem like you expect to have a directory named "fileswifiqr".

The missing link in your troubleshooting attempt was: While you knew the file you were intending to open existed, you still needed to make sure that your code was actually opening the file you were intending to open.

Share:
16,689
Steve Smith
Author by

Steve Smith

Updated on June 04, 2022

Comments

  • Steve Smith
    Steve Smith almost 2 years

    I am trying to share A PNG with ShareActionProvider in Android. When I open the PNG to the Uri, it says there is no file found. open failed: ENOENT (No such file or directory) even though I have gone into the file system and have seen it myself. I have tried it on my phone and the AVD with the save error. I have looked around but have found no answers. Any help would be much appreciated.

    Here is where I try to open the file:

     File file = new File(getFilesDir()+"wifiqr/", "QRCode.png");
                    file.setReadable(true, false);
                    Uri uri = Uri.fromFile(file);
                    Intent intent = new Intent(Intent.ACTION_SEND);
                    intent.setType("image/*");
                    intent.putExtra(Intent.EXTRA_STREAM,uri);
                    provider.setShareIntent(intent);
    

    If it helps here is where I save it:

     String fileName = getFilesDir()+"/wifiqr/" + "QRCode.png";
                    etSSID.setText(fileName);
                    OutputStream stream = null;
                    try {
                        stream = new FileOutputStream(fileName);
                        bmp.compress(Bitmap.CompressFormat.PNG, 80, stream);
                        stream.close();
                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
    

    Finally the error log:

    11-15 02:34:43.243      594-892/com.android.mms E/Mms/media: IOException caught while opening or reading stream
            java.io.FileNotFoundException: /data/data/com.frostbytedev.wifiqr/fileswifiqr/QRCode.png: open failed: ENOENT (No such file or directory)
            at libcore.io.IoBridge.open(IoBridge.java:416)
            at java.io.FileInputStream.<init>(FileInputStream.java:78)
            at java.io.FileInputStream.<init>(FileInputStream.java:105)
            at android.content.ContentResolver.openInputStream(ContentResolver.java:447)
            at com.android.mms.model.MediaModel.initMediaSize(MediaModel.java:235)
            at com.android.mms.model.MediaModel.<init>(MediaModel.java:74)
            at com.android.mms.model.RegionMediaModel.<init>(RegionMediaModel.java:36)
            at com.android.mms.model.RegionMediaModel.<init>(RegionMediaModel.java:31)
            at com.android.mms.model.ImageModel.<init>(ImageModel.java:73)
            at com.android.mms.ui.SlideshowEditor.changeImage(SlideshowEditor.java:163)
            at com.android.mms.data.WorkingMessage.internalChangeMedia(WorkingMessage.java:640)
            at com.android.mms.data.WorkingMessage.changeMedia(WorkingMessage.java:588)
            at com.android.mms.data.WorkingMessage.setAttachment(WorkingMessage.java:453)
            at com.android.mms.ui.ComposeMessageActivity.addImage(ComposeMessageActivity.java:3150)
            at com.android.mms.ui.ComposeMessageActivity.addAttachment(ComposeMessageActivity.java:3291)
            at com.android.mms.ui.ComposeMessageActivity.access$5900(ComposeMessageActivity.java:167)
            at com.android.mms.ui.ComposeMessageActivity$35.run(ComposeMessageActivity.java:3236)
            at com.android.mms.ui.AsyncDialog$ModalDialogAsyncTask.doInBackground(AsyncDialog.java:129)
            at com.android.mms.ui.AsyncDialog$ModalDialogAsyncTask.doInBackground(AsyncDialog.java:84)
            at android.os.AsyncTask$2.call(AsyncTask.java:287)
            at java.util.concurrent.FutureTask.run(FutureTask.java:234)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
            at java.lang.Thread.run(Thread.java:856)
            Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)
            at libcore.io.Posix.open(Native Method)
            at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
            at libcore.io.IoBridge.open(IoBridge.java:400)
            ... 24 more
    
  • Steve Smith
    Steve Smith over 10 years
    Fixed that and still get the error and I did look at the path and they have the same exact paths
  • Jason C
    Jason C over 10 years
    And now the error says /data/data/com.frostbytedev.wifiqr/files/wifiqr/QRCode.png, and you can verify in other ways that the file exists (e.g. ls /data/data/com.frostbytedev.wifiqr/files/wifiqr/QRCode.png in a console shows the file)? And you have printed out the path you are saving to and the path you are loading from and verified that they are the same?
  • Steve Smith
    Steve Smith over 10 years
    Yes they are the exact same