190 votes

Comment faire pour créer le répertoire automatiquement sur la carte SD

Je suis en train d’enregistrer mon fichier à l’emplacement suivant
mais je me fais l’exception
Cependant, quand je mets le chemin comme `` ça marche.

Maintenant je suppose que je ne suis pas en mesure de créer répertoire automatiquement de cette façon.

Quelqu'un peut-il suggérer comment créer un `` via le code ?

453voto

fiXedd Points 21644

Si vous créez un Fichier objet qui encapsule le répertoire de plus haut niveau que vous pouvez l'appeler de mkdirs() méthode pour construire tous les répertoires voulus. Quelque chose comme:

// create a File object for the parent directory
File wallpaperDirectory = new File("/sdcard/Wallpaper/");
// have the object build the directory structure, if needed.
wallpaperDirectory.mkdirs();
// create a File object for the output file
File outputFile = new File(wallpaperDirectory, filename);
// now attach the OutputStream to the file object, instead of a String representation
FileOutputStream fos = new FileOutputStream(outputFile);

Remarque: Il peut être judicieux d'utiliser de l'Environnement.getExternalStorageDirectory() pour obtenir la "Carte SD" répertoire que cela pourrait changer si le téléphone vient le long qui a quelque chose d'autre que d'une Carte SD (comme le flash intégré, un menu à la l'iPhone). De toute façon, vous devriez garder à l'esprit que vous avez besoin pour vous assurer que c'est vraiment là que la Carte SD peut être retirée.

Mise à JOUR: Depuis l'API de Niveau 4 (1.6), vous allez également avoir à demander la permission. Quelque chose comme ceci (dans le manifeste) devrait fonctionner:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

57voto

Daniel Points 880

Eu le même problème et je veux juste ajouter que AndroidManifest.xml a également besoin de cette autorisation :

40voto

Vijay Kumar A B Points 269

Voici ce qui fonctionne pour moi.

dans votre manifeste et le code ci-dessous

24voto

Amt87 Points 872

En fait j’ai utilisé une partie de @fiXedd asnwer et cela a fonctionné pour moi :

Assurez-vous que vous utilisez pour créer le chemin d’accès complet mkdirs() pas mkdir()

12voto

Nick Ruiz Points 514

Avec API 8 et supérieur, l’emplacement de la carte SD a changé. réponse de @fiXedd est bonne, mais pour le code plus sûr, vous devez utiliser pour vérifier si le média est disponible. Vous pouvez utiliser pour naviguer vers le répertoire souhaité (en supposant que vous utilisez l’API 8 ou supérieure).

Vous pouvez en savoir plus dans la documentation du SDK.

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