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的主要内容,如果未能解决你的问题,请参考以下文章
C# File.Exists 返回 false,文件确实存在