108 votes

Différence entre getExternalFilesDir et getExternalStorageDirectory()

Je comprends que ExternalFiles doit être utilisé pour les API 8 et supérieures et que getExternalStorageDirectory est pour les API 7 et inférieures. Cependant, je suis un peu confus entre les deux utilisations. Par exemple, je voulais vérifier qu'un dossier existe et auparavant on utilisait quelque chose comme :

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

Cependant, tous les exemples que je vois disent d'utiliser getExternalFilesDir (null), File.ext. Puisque je suis au-dessus de l'API 8, je veux utiliser cette méthode, mais comment puis-je simplement vérifier un dossier ? Je vérifierai l'existence d'un fichier à un autre moment, mais pour l'instant je veux juste voir si le dossier existe ?

152voto

waqaslam Points 31012
getExternalFilesDir()

Il renvoie le chemin d'accès à dossiers dossier à l'intérieur Android/data/data/your_package/ sur votre carte SD. Elle est utilisée pour stocker les fichiers nécessaires à votre application (par exemple, les images téléchargées depuis le web ou les fichiers de cache). Une fois l'application désinstallée, toutes les données stockées dans ce dossier disparaissent également.

getExternalStorageDirectory()

Il renvoie le chemin d'accès à la racine de votre carte SD (par ex. mnt/sdcard/ ). Si vous enregistrez des données sur ce chemin et désinstallez l'application, ces données ne seront pas perdues.

98voto

VicJordan Points 382

Tout d'abord, nous devons comprendre la différence entre le stockage interne, le stockage externe (également appelé stockage externe primaire) et le stockage externe secondaire.

Stockage interne : est un espace de stockage auquel l'utilisateur n'a pas accès, sauf par l'intermédiaire d'applications installées (ou par le rootage de l'appareil). Exemple : data/data/app_packageName

Stockage externe primaire : Stockage partagé intégré qui est "accessible par l'utilisateur en branchant un câble USB et en le montant en tant que lecteur sur un ordinateur hôte". Exemple : Lorsque nous disons Nexus 5 32 GB.

Stockage externe secondaire : Stockage amovible. Exemple : Carte SD.

getExternalFilesDir (String type)

Il renvoie le chemin d'accès au dossier de fichiers dans Android/data/data/your_package/ sur le stockage externe principal. Qui est le stockage intégré.

Environment.getExternalStorageDirectory()

Il renvoie le chemin d'accès au répertoire de stockage externe secondaire.

21voto

SGal Points 846

! MISE À JOUR IMPORTANTE ! pour tous ceux qui sont confrontés à cette question.

Comme il s'agit d'une question déjà ancienne, je voulais simplement apporter quelques informations supplémentaires. Depuis KitKat, même les applications qui ont ÉCRIRE_STOCKAGE_EXTERNE L'autorisation est seulement autorisé écrire à Android/data/data/your_package/ sur un support externe, alias getExternalFilesDir()

Si vous essayez d'écrire à getExternalStorageDirectory() + "/somefolder/anotherfolder/" vous obtiendrez une exception de sécurité (SecurityException) sur la plupart des appareils.

15voto

m__ Points 1

! ! IMPORTANT !

Environment.getExternalStorageDirectory() est obsolète et Context#getExternalFilesDir(String), MediaStore, ou Intent#ACTION_OPEN_DOCUMENT, doivent être utilisés à la place.

Cette méthode a été supprimée au niveau 29 de l'API. Pour améliorer la confidentialité des utilisateurs, l'accès direct aux périphériques de stockage partagés/externes est supprimé. Lorsqu'une application cible Build.VERSION_CODES.Q, le chemin renvoyé par cette méthode n'est plus directement accessible aux applications. Les applications peuvent continuer à accéder au contenu stocké sur le stockage partagé/externe en migrant vers des alternatives telles que Context#getExternalFilesDir(String), MediaStore, ou Intent#ACTION_OPEN_DOCUMENT.

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

De plus, à partir d'Android.M, les développeurs doivent demander des autorisations au moment de l'exécution.

Voir plus de détails dans la documentation aquí y cette question

Environment.getExternalStorageDirectory() obsolète au niveau de l'API 29 java

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X