web-dev-qa-db-fra.com

Enregistrement de fichiers dans Android - Pour les débutants (stockage interne / externe)

Je suis très nouveau sur Android développement et j'ai besoin d'une aide pour débutants s'il vous plaît ...

Je crée une application qui devrait avoir 2 répertoires, un répertoire de bases de données et un répertoire d'images, tout comme Whatsapp.

Je veux voir ces répertoires dans le Gestionnaire de fichiers lorsque je parcours mon téléphone, tout comme vous voyez les autres dossiers d'applications. J'ai essayé tout ce que j'ai trouvé ici, pour le créer dans le stockage interne et dans le stockage externe à partir du code. Les dossiers semblent avoir été créés, mais lorsque j'ai parcouru le gestionnaire de fichiers de mon téléphone, je n'ai pas trouvé le dossier avec le nom de mon application et à l'intérieur mes dossiers Bases de données et Images ... Que fais-je de mal? dois-je créer ces dossiers dans le Android studio comme ajout de dossiers? ou dois-je le créer à partir du code?

Pouvez-vous s'il vous plaît me donner les actions que je dois faire pour accomplir cette tâche? J'utilise Android studio 3.1.3. Merci pour les aides! :)

5
Shlomi

Les termes " Stockage interne" et " Stockage externe" peuvent être déroutants au début, car les intentions de Google sont différentes de ce que nous attendons et savons de nos jours -Utilisation courante du langage: "Externe" ne signifie pas nécessairement la "Carte SD". Ce gars a fait un excellent article sur la confusion terminologique

Selon vos intentions, vous voudriez travailler avec le concept de stockage externe . Les différences sont bien expliquées dans le Documentation , mais je vais vous les expliquer brièvement ici.

À la fin, je vais vous donner un exemple, mais nous allons d'abord connaître les bases:

Stockage interne

  • Les fichiers sont accessibles par uniquement votre application
  • Les fichiers sont supprimés lorsque votre application est désinstallée
  • Les fichiers sont toujours disponibles (ce qui signifie qu'ils ne seront jamais enregistrés sur une mémoire amovible)

Stockage externe

  • Les fichiers sont entièrement lisibles par d'autres applications (y compris toute variante de l'application File Manager, dans votre cas)
  • Les fichiers ne sont pas nécessairement supprimés lorsque votre application est désinstallée - expliqué plus tard
  • La disponibilité des fichiers n'est pas garantie (peut être supprimée par d'autres applications/mémoire amovible)

Alors maintenant que nous savons que vous avez besoin d'un stockage externe, il y a plusieurs choses à faire avant de commencer:

  • Exiger des autorisations (lecture/écriture) dans votre fichier Manifest.xml, Selon vos besoins:
    <manifest ...>
    <uses-permission Android:name="Android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
    ...
    </manifest>

Chaque autorisation est indépendante, ce qui signifie que vous n'avez pas besoin des deux si, par exemple, vous souhaitez uniquement lire des fichiers au lieu de les écrire

  • Vérifiez que le stockage est disponible - cela se fait au moment de l'exécution et est bien expliqué dans la documentation. Nous devons nous assurer que le stockage est monté dans le périphérique/son état n'est pas problématique d'une manière qui entraînerait un échec des demandes de lecture/écriture.

Exemple de temps!

Dans la méthode donnée, nous enregistrerons un fichier texte dans le répertoire racine.

Crédits à cet article

public void writeFileExternalStorage() {

    //Text of the Document
    String textToWrite = "bla bla bla";

    //Checking the availability state of the External Storage.
    String state = Environment.getExternalStorageState();
    if (!Environment.MEDIA_MOUNTED.equals(state)) {

        //If it isn't mounted - we can't write into it.
        return;
    }

    //Create a new file that points to the root directory, with the given name:
    File file = new File(getExternalFilesDir(null), filenameExternal);

    //This point and below is responsible for the write operation
    FileOutputStream outputStream = null;
    try {
        file.createNewFile();
        //second argument of FileOutputStream constructor indicates whether
        //to append or create new file if one exists
        outputStream = new FileOutputStream(file, true);

        outputStream.write(textToWrite.getBytes());
        outputStream.flush();
        outputStream.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

Je voudrais répondre spécifiquement à certaines de vos questions:

dois-je créer ces dossiers dans le studio Android comme ajout de dossiers? ou dois-je le créer à partir du code?

Certainement pas via le Android Studio. Ce sont vos dossiers de projets, contenant votre code. La façon de le faire est mentionnée ci-dessus.

Je n'ai pas trouvé le dossier avec le nom de mon application et à l'intérieur mes dossiers Bases de données et Images ... Qu'est-ce que je fais mal?

Probablement enregistré vos fichiers en tant que stockage interne/les a enregistrés en tant que dossiers de projet comme vous l'avez mentionné plus tôt - et ceux-ci ne s'afficheraient pas (et ne devraient pas).


Choses utiles à savoir

Il existe 2 types d'annuaires: public et privé.

Privé

  • Non accessible par le Media Store
  • Les fichiers sont supprimés lorsque l'application est désinstallée
  • Récupéré par la méthode getExternalFilesDir(...)

Exemple: le répertoire WhatsApp (dans mon téléphone) est situé juste au niveau racine. L'appeler serait: getExternalFilesDir("WhatsApp/...")

Public (Bibliothèque Téléchargements/Films/Images)

  • Les fichiers sont analysés par le MediaStore
  • Récupéré par la méthode Environment.getExternalStoragePublicDirectory(...)

Exemple: obtenir le dossier Documents ressemblerait à: Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOCUMENTS)

7
Barak