web-dev-qa-db-fra.com

Comment créer un répertoire sur le stockage interne lors de l'installation de l'application Android?

Je veux avoir un seul dossier dans lequel je mettrai toutes les ressources dont j'ai besoin et je le veux sur la mémoire interne. Puisque je veux que ce répertoire ne soit créé qu'une seule fois, j'ai découvert que je devais le créer dans l'activité principale de l'application:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    File directory = context.getDir("mydir", Context.MODE_PRIVATE);
    Log.d("directory", directory.getAbsolutePath().toString());
} 

Cela semble correct, car c’est ce que j’ai pu trouver sur Internet. Cependant, je reçois beaucoup d’erros, je peux accéder au journal du chemin du répertoire et l’application ne démarre pas. Une idée pourquoi?

De plus, si je travaille avec la mémoire de stockage interne chaque fois que j'exécute mon application depuis Eclipse sur mon téléphone, la précédente est-elle automatiquement supprimée avec ses ressources ou dois-je le faire manuellement?

11
Andrey

utilisez getCacheDir(). Il renvoie le chemin absolu du répertoire de cache spécifique à l'application sur le système de fichiers. Ensuite, vous pouvez créer votre répertoire

File myDir = new File(getCacheDir(), "folder");
myDir.mkdir();
15
Blackbelt

SI vous souhaitez plutôt stocker sur la carte SD de stockage externe, vous devez disposer de cette

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

Dans votre fichier AndroidManifest.xml

Aussi ceci pour travailler avec le stockage:

File direct = new File(Environment.getExternalStorageDirectory()+"/folder");

if(!direct.exists()) {
     if(direct.mkdir()); //directory is created;
}
6
Andy Davies

Tout d’abord, assurez-vous de lire et de comprendre les différentes options de stockage disponibles pour votre application. Google a un très bon article sur le sujet ici:

http://developer.Android.com/guide/topics/data/data-storage.html

La réponse ci-dessus de Andy mentionne Environment.getExternalStorageDirectory () (API de niveau 7) pour écrire sur une carte SD ou similaire, mais vous devez garder à l’esprit que les fichiers écrits à cet emplacement ne seront pas supprimés lorsque l’utilisateur désinstallera l’application. La documentation dit:

"Les applications ne doivent pas utiliser directement ce répertoire de niveau supérieur, afin d'éviter de polluer l'espace de noms racine de l'utilisateur"

Si vous ciblez l'API de niveau 8 ou supérieur, utilisez plutôt Context.getExternalCacheDir (), car les fichiers de cet emplacement seront supprimés lors de la désinstallation de l'application. Si vous voulez vraiment que les fichiers persistent même après une désinstallation, utilisez Context.getExternalFilesDir (). Il y a aussi getCacheDir () et getFilesDir () pour travailler avec des fichiers sur la mémoire de stockage interne.

Comme cela a été mentionné dans les commentaires de votre question, vous devriez vraiment afficher les erreurs ici pour que nous puissions vous aider.

Post-scriptum Je suis nouveau pour répondre aux questions sur SO donc je n'ai pas assez de représentant pour poster des liens vers toutes les fonctions mentionnées dans ma réponse et je ne semble pas capable de commenter sur les messages précédents.

5
britzl
<uses-permission Android:name="Android.permission.WRITE_INTERNAL_STORAGE" />
<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />

File newfile = new File(Environment.getExternalStorageDirectory()+"/specifyfoldername","nestedfoldername");
    direct.mkdir();
// it will create two folder in your internal storage first is specifyfoldername and another one inside the mentioned folder which is nestedfoldername
    }
0
Shashwat Gupta

Je pense que Blackbelt répond bien, mais je ne voulais pas le stocker dans le cache interne (il sera effacé et écrit souvent de cette façon pour les spécifications que j'essayais de définir) . Ce que j’ai fait est: 

String path = "";


Et alors

if (path.isEmpty()) {
        File file = new File(this.getFilesDir(), "my_dir_identfiying_name/");
        path = file.getAbsolutePath();
        Log.d("PATH", path);
    }
0
sivi

Android studio Télécharger la vidéo dans un dossier spécifique:

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

  String path = Environment.getDataDirectory().getAbsolutePath().toString() + "/storage/emulated/0/appFolder";
  File mFolder = new File(path);
  if (!mFolder.exists()) {
      mFolder.mkdir();
  }
  File Directory = new File("/sdcard/kaizzan/");
  Directory.mkdirs();
0
Balaji Rajendran