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

android, file

Solution

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

.

Problem

Both files are present on the sdcard, but for whatever reason `exists()` returns false for 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 exists"); } else { LOG.x("file does not exist"); } } ``` Now, I've looked at what's under the hood and what the expression `file.exists()` actually does, 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.

Original source