java.io.FileNotFoundException 在 Android Studio 4.1.2 中使用 getExternalStorageDirectory
java.io.FileNotFoundException in Android Studio 4.1.2 when using getExternalStorageDirectory
我正在尝试读取模拟器中的文本文件,但找不到该文件。 getExternalStorageDirectory 不断返回此异常。要添加文件,我只需将它拖放到模拟器中,它就会显示在“文件”>“下载”文件夹中。我如何访问它?
如果您的应用的目标 SDK 低于 29。确保您的功能类似于:Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
。这是指向 Download
文件夹而不是指向根文件夹。
如果您的应用以 SDK 版本 29 (Q) 为目标,则存在限制应用访问 public 文件夹的隐私更改。
在这里解释:
https://developer.android.com/about/versions/10/privacy/changes
所以,选项是:
- 将
Environment.getExternalStorageDirectory()
的弃用函数更改为 context.getExternalFilesDir()
、context.getExternalCacheDir()
或 context.getExternalMediaDirs()
。然后将文件放在下载文件夹中,您需要将文件放入 ../Android/data/com.yourpackagename/
(取决于设备)
- 如果您仍然想使用 public 文件夹并且仍然想使用
getExternalStorageDirectory
,请确保将 android:requestLegacyExternalStorage="true"
放在 <application>
标签内的清单中
- 如果您仍想使用 public 文件夹,并希望摆脱已弃用的
getExternalStorageDirectory
,您可以使用 ACTION_OPEN_DOCUMENT
的意图
如果您的应用已经针对 SDK 30,那会容易得多,因为我们现在可以直接访问文件路径。 https://developer.android.com/about/versions/11/privacy/storage
因此,即使您使用的是 getExternalStorageDirectory
,该文件也应该可以访问并且也不例外。
此外,请确保您已声明 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
我正在尝试读取模拟器中的文本文件,但找不到该文件。 getExternalStorageDirectory 不断返回此异常。要添加文件,我只需将它拖放到模拟器中,它就会显示在“文件”>“下载”文件夹中。我如何访问它?
如果您的应用的目标 SDK 低于 29。确保您的功能类似于:Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
。这是指向 Download
文件夹而不是指向根文件夹。
如果您的应用以 SDK 版本 29 (Q) 为目标,则存在限制应用访问 public 文件夹的隐私更改。 在这里解释: https://developer.android.com/about/versions/10/privacy/changes
所以,选项是:
- 将
Environment.getExternalStorageDirectory()
的弃用函数更改为context.getExternalFilesDir()
、context.getExternalCacheDir()
或context.getExternalMediaDirs()
。然后将文件放在下载文件夹中,您需要将文件放入../Android/data/com.yourpackagename/
(取决于设备) - 如果您仍然想使用 public 文件夹并且仍然想使用
getExternalStorageDirectory
,请确保将android:requestLegacyExternalStorage="true"
放在<application>
标签内的清单中 - 如果您仍想使用 public 文件夹,并希望摆脱已弃用的
getExternalStorageDirectory
,您可以使用ACTION_OPEN_DOCUMENT
的意图
如果您的应用已经针对 SDK 30,那会容易得多,因为我们现在可以直接访问文件路径。 https://developer.android.com/about/versions/11/privacy/storage
因此,即使您使用的是 getExternalStorageDirectory
,该文件也应该可以访问并且也不例外。
此外,请确保您已声明 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />