android - file.exists()为现有文件返回false(对于不同于pdf的任何内容)

时间:2014-02-05 14:03:02

标签: android file

这两个文件都存在于SD卡上,但无论出于何种原因,exists()都会返回错误的png文件。

//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");
    }
}

现在,我看看底层是什么,file.exists()实际上做了什么,这就是它的作用:

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

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

可能是通过抛出异常并返回false来完成方法吗?

如果是的话,

  • 我该如何开展这项工作
  • 检查SD卡上是否存在文件的其他选项可供使用吗?

感谢。

4 个答案:

答案 0 :(得分:12)

1您需要获得设备的许可

将此添加到AndroidManifest.xml

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

2获取外部存储目录

File sdDir = Environment.getExternalStorageDirectory();

3最后,检查文件

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

注意:filename是sdcard中的路径,而不是root中的路径。

例如:你想要找到

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

然后文件名是

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

答案 1 :(得分:3)

请尝试此代码。希望它对你有所帮助。我只使用此代码。它的工作正常,我找到该文件是否存在。请尝试让我知道。

File file = new File(path);
    if (!file.isFile()) {
         Log.e("uploadFile", "Source File not exist :" + filePath);
    }else{
    Log.e("uploadFile","file exist");
}

答案 2 :(得分:2)

检查USB存储器是否未连接到PC。由于Android设备作为存储器连接到PC,因此文件不可用于应用程序,并且您对File.Exists()获得FALSE。

答案 3 :(得分:2)

内部存储中存在检查文件

示例:/storage/emulated/0/FOLDER_NAME/FILE_NAME.EXTENTION

  1. 检查权限(写入存储)

  2. 并且检查文件是否存在

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

  3. 从文件名

    获取文件

    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; }