android - 使用 getExternalStorageDirectory 时 Android Studio 4.1.2 中的 java.io.FileNotFoundException
问题描述
我正在尝试读取模拟器中的文本文件,但找不到该文件。getExternalStorageDirectory 不断返回此异常。要添加文件,我只需将它拖放到模拟器中,它就会显示在 Files > Downloads 文件夹中。我如何访问它?
解决方案
如果您的应用面向低于 29 的 SDK。请确保您的功能类似于:Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
. 这是指向Download
文件夹而不是指向根文件夹。
如果您的应用以 SDK 版本 29 (Q) 为目标,则存在限制应用访问公用文件夹的隐私更改。这里解释: https ://developer.android.com/about/versions/10/privacy/changes
所以,选项是:
- 将不推荐使用的函数更改
Environment.getExternalStorageDirectory()
为context.getExternalFilesDir()
、 或context.getExternalCacheDir()
、 或context.getExternalMediaDirs()
。然后将文件放在下载文件夹中,您需要将文件放入../Android/data/com.yourpackagename/
(取决于设备) - 如果您仍然想使用公用文件夹并且仍然想使用
getExternalStorageDirectory
,请确保将android:requestLegacyExternalStorage="true"
清单放入<application>
标签内 - 如果您仍然想使用 public 文件夹,并且想摆脱 deprecated
getExternalStorageDirectory
,您可以使用intent ofACTION_OPEN_DOCUMENT
如果您的应用程序已经以 SDK 30 为目标,那会容易得多,因为我们现在可以直接访问文件路径。https://developer.android.com/about/versions/11/privacy/storage
因此,即使您正在使用getExternalStorageDirectory
,该文件也应该可以访问,也不例外。
另外,请确保您已声明<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
推荐阅读
- r - 按一列匹配两个数据框并从R中另一列中的匹配行中减去
- html - 悬停时的图像与粘性标题重叠
- python - 如何在 django 的数据库中显示主页中的视频
- javascript - 如何将值四舍五入到小数点后 1 位?
- django - 视图中的 Django 模型对象访问
- wordpress - WordPress ACF 插件到 Rest API
- android - 我如何自定义 JsonObjectRequest 以便我可以覆盖 volley 库中的 getParams 方法
- xpath - 无法使用 xpath 中的文本定位元素
- forms - 集合字段的 FileType 倍数
- javascript - 选择不起作用 - 单击时未出现选项