如何解决使用 getExternalStorageDirectory 时 Android Studio 4.1.2 中的 java.io.FileNotFoundException
我正在尝试读取模拟器中的文本文件,但找不到该文件。 getExternalStorageDirectory 不断返回此异常。要添加文件,我只需将它拖放到模拟器中,它就会显示在“文件”>“下载”文件夹中。我如何访问它?
解决方法
如果您的应用面向低于 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>
标签内的清单中 - 如果您仍然想使用公共文件夹,并且想摆脱已弃用的
getExternalStorageDirectory
,您可以使用ACTION_OPEN_DOCUMENT
的 Intent
如果您的应用程序已经针对 SDK 30,那会容易得多,因为我们现在可以直接访问文件路径。 https://developer.android.com/about/versions/11/privacy/storage
因此,即使您使用的是 getExternalStorageDirectory
,该文件也应该可以访问并且也不例外。
另外,请确保您已声明 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。