getExternalFilesDir和getExternalStorageDirectory()之间的差异

时间:2012-04-12 12:42:38

标签: android

我知道ExternalFiles将在API 8及更高版本上使用,而getExternalStorageDirectory将在7及以下使用。不过我使用之间有点困惑。例如,我想检查一个存在的文件夹,之前你会使用类似的东西:

File ChildFolder = new File(Environment.getExternalStorageDirectory() + "/ParentFolder/Child");

但是我看到的每个例子都说使用了getExternalFilesDir(null),File.ext。由于我在API 8以上,我想使用此方法,但我如何检查文件夹?我将在另一点检查文件是否存在,但现在只想查看文件夹是否存在?

TIA JB

4 个答案:

答案 0 :(得分:103)

getExternalFilesDir()

它会返回SD卡上 Android / data / data / your_package / 文件文件夹的路径。它用于存储应用程序所需的任何文件(例如,从Web或缓存文件下载的图像)。卸载应用程序后,此文件夹中存储的所有数据也将消失。

getExternalStorageDirectory()

它返回SD卡的根路径(例如 mnt / sdcard / )。如果您在此路径上保存数据并卸载应用程序,则该数据不会丢失。

答案 1 :(得分:40)

首先,我们需要了解内部存储,外部存储(又称主外部存储)和辅助外部存储之间的区别是什么?

内部存储是用户无法访问的存储,除非是已安装的应用(或通过生根设备)。示例:data / data / app_packageName

主要外部存储:在内置的共享存储中,用户可以通过插入USB电缆并将其作为驱动器安装在主机上进行访问"。示例:当我们说Nexus 5 32 GB。

辅助外部存储:可移动存储。示例:SD卡。

getExternalFilesDir (String type)

它返回主外部存储器上Android / data / data / your_package /中的files文件夹的路径。这是内置存储。

getExternalStorageDirectory ()

它将返回辅助外部存储目录的路径

答案 2 :(得分:13)

<强>!对于遇到此问题的人来说,重要更新!。

因为这是一个有点老问题,只是想提供一些额外的信息。由于KitKat甚至具有 WRITE_EXTERNAL_STORAGE 权限的应用仅允许在外部存储上写入 Android / data / data / your_package / 又名 getExternalFilesDir()

如果您尝试写入getExternalStorageDirectory() + "/somefolder/anotherfolder/",您将在大多数设备上获得SecurityException

答案 3 :(得分:7)

!!重要!!

Environment.getExternalStorageDirectory()已被弃用,应改用Context#getExternalFilesDir(String),MediaStore或Intent#ACTION_OPEN_DOCUMENT。

此方法在API级别29中已弃用。 为了提高用户隐私,不建议直接访问共享/外部存储设备。当应用程序定位到Build.VERSION_CODES.Q时,此方法返回的路径不再可供应用程序直接访问。通过迁移到Context#getExternalFilesDir(String),MediaStore或Intent#ACTION_OPEN_DOCUMENT之类的替代方案,应用程序可以继续访问共享/外部存储中存储的内容。

https://developer.android.com/reference/android/os/Environment.html#getExternalStorageDirectory()

同样从Android开始。M开发人员需要在运行时请求权限。

在文档herethis question中查看更多详细信息

Environment.getExternalStorageDirectory() deprecated in API level 29 java