File.exists() 为现有文件返回 false

Posted

技术标签:

【中文标题】File.exists() 为现有文件返回 false【英文标题】:File.exists() returns false for existing file 【发布时间】:2015-05-05 16:11:03 【问题描述】:

我正在尝试检查用户的下载目录中是否存在文件。

File imageFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),imageName);
if(imageFile.exists())
  // Do something
else
  // Do something else

我已经拿到了目录的内容

File did = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS));
File files[] = dir.listFiles();

在调试器中:

imageFile.path = "/storage/emulated/0/Download/floorplan_lobby.png"

files[12].path = "/storage/emulated/0/Download/floorplan_lobby.png"

但是imageFile.exists() 返回错误。为什么?

没关系,但我用的是三星 Galaxy Note。

【问题讨论】:

我曾经访问过这样的文件File file = new File(Environment.getExternalStorageDirectory() + "/Folder/Folder/Folder/file.jpg"); 该文件是如何到达那里的?文件管理器应用程序可以打开它进行查看吗?可能存储仿真处于不一致状态,需要通过调用媒体扫描器或重新启动设备来刷新。 该文件是使用 android 文件传输应用添加的。文件管理器可以打开文件。我已经重启了设备。没有帮助。 2 年过去了,但你有没有追根究底? 你能解决这个问题吗? 【参考方案1】:

检查

    清单权限
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    使用文件提供程序创建和访问文件
    <provider
            android:name="androidx.core.content.FileProvider"
            android:authorities="your_package.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_list" />
        </provider>
    file_list 内容:
    <?xml version="1.0" encoding="utf-8"?>
    <paths>
        <external-path
            name="external"
            path="." />
        <external-files-path
            name="external_files"
            path="." />
        <cache-path
            name="cache"
            path="." />
        <external-cache-path
            name="external_cache"
            path="." />
        <files-path
            name="files"
            path="." />
    </paths>
    保持文件名简短

【讨论】:

以上是关于File.exists() 为现有文件返回 false的主要内容,如果未能解决你的问题,请参考以下文章

加快非现有网络共享的 File.Exists

File.Exists仅在文件名上返回true

Java file.exists() 错误

C# File.Exists 返回 false,文件确实存在

检查文件是不是存在? file.exists() 总是返回 false

File.Exists判断文件是不是存在总是返回False?