getExternalFilesDir和getExternalStorageDirectory()之间的差异

据我所知,ExternalFiles将在API 8上使用,而getExternalStorageDirectory则是在7以下。 不过我在使用之间有点混淆。 例如,我想检查一个存在的文件夹,以前您会使用类似于:

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

不过,我看到每个示例都使用getExternalFilesDir(null),File.ext。 由于我在API 8以上,我想使用这种方法,但我怎么才能检查文件夹? 我会检查文件存在的另一点,但现在只想看看文件夹是否存在?

TIA JB

 getExternalFilesDir() 

它返回到您的SD卡上的Android / data / data / your_package /内的文件夹的path。 它用于存储您的应用程序所需的任何文件(例如,从网页或caching文件下载的图像)。 一旦应用程序被卸载,任何存储在这个文件夹中的数据也没有了。

 getExternalStorageDirectory() 

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

首先,我们需要了解内部存储,外部存储(也称为主外部存储)和辅助外部存储之间的区别。

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

主外部存储器:内置共享存储器,“用户可以通过插入USB电缆将其作为驱动器安装到主机上”。 例如:当我们说Nexus 5 32 GB时。

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

 getExternalFilesDir (String type) 

它将path返回到主要外部存储上的Android / data / data / your_package /内的文件夹。 这是内置存储。

 getExternalStorageDirectory () 

它将返回主外部存储目录的path

重要更新! 谁遇到这个问题。

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

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