android - file.exists() returns false for existing

2020-02-28 03:40发布

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.

标签: android file
4条回答
手持菜刀,她持情操
2楼-- · 2020-02-28 03:46

Check that USB Storage is not connected to the PC. Since Android device is connected to the PC as storage the files are not available for the application and you get FALSE to File.Exists().

查看更多
3楼-- · 2020-02-28 03:52

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

.

查看更多
▲ chillily
4楼-- · 2020-02-28 04:03

Please try this code. Hope it should helpful for you. I am using this code only. Its working fine for me to find the file is exists or not. Please try and let me know.

File file = new File(path);
    if (!file.isFile()) {
         Log.e("uploadFile", "Source File not exist :" + filePath);
    }else{
    Log.e("uploadFile","file exist");
}
查看更多
兄弟一词,经得起流年.
5楼-- · 2020-02-28 04:04

Check file exist in internal storage

Example : /storage/emulated/0/FOLDER_NAME/FILE_NAME.EXTENTION

  1. check permission (write storage)

  2. and check file exist or not

    public static boolean isFilePresent(String fileName) { return getFilePath(fileName).isFile(); }

  3. get File from the file name

    public static File getFilePath(String fileName){ String extStorageDirectory = Environment.getExternalStorageDirectory().toString(); File folder = new File(extStorageDirectory, "FOLDER_NAME"); File filePath = new File(folder + "/" + fileName); return filePath; }

查看更多
登录 后发表回答