Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

android - file.exists() returns false for existing file (for anything different than pdf)

Tags:

file

android

Both files are present on the sdcard, but for whatever reason exists() returns false the the png file.

//String path = "/mnt/sdcard/Android/data/com.gemoro.toffer/cache/1551619351/0/foto/-921042926.png";
  String path = "/mnt/sdcard/Android/data/com.gemoro.toffer/cache/1551619351/0/foto/-1200240592.pdf";

File file2 = new File(path);

if (null != file2)
{
    if(file2.exists())
    {
        LOG.x("file exist");
    }
    else
    {
        LOG.x("file does not exist");
    }
}

Now, I've look at what's under the hood, what the method file.exists() does actually and this is what it does:

public boolean exists()
{
    return doAccess(F_OK);
}

private boolean doAccess(int mode)
{
    try
    {
        return Libcore.os.access(path, mode);
    }
    catch (ErrnoException errnoException)
    {
        return false;
    }
}

May it be that the method finishes by throwing the exception and returning false?

If so,

  • how can I make this work
  • what other options to check if a file exists on the sdcard are available for use?

Thanks.

like image 907
Goran Horia Mihail Avatar asked Feb 05 '14 14:02

Goran Horia Mihail


1 Answers

1 You need get the permission of device

Add this to AndroidManifest.xml

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

2 Get the external storage directory

File sdDir = Environment.getExternalStorageDirectory();

3 At last, check the file

File file = new File(sdDir + filename /* what you want to load in SD card */);
if (!file.canRead()) {
    return false;
}
return true;

Note: filename is the path in the sdcard, not in root.

For example: you want find

/mnt/sdcard/Android/data/com.gemoro.toffer/cache/1551619351/0/foto/-921042926.png

then filename is

./Android/data/com.gemoro.toffer/cache/1551619351/0/foto/-921042926.png

.

like image 181
Alex Chi Avatar answered Oct 25 '22 16:10

Alex Chi