IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Context.getDir vs classe File ?


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2011
    Messages : 47
    Par défaut Context.getDir vs classe File ?
    Bonjour,

    Je me suis mis depuis peu à développer sous android, et je me posais une question par rapport à la méthode getDir de la classe context.
    Concrètement, à quoi sert-elle ? Sur la Javadoc, on peut lire :
    Retrieve, creating if needed, a new directory in which the application can place its own custom data files. You can use the returned File object to create and access files in this directory. Note that files created through a File object will only be accessible by your own application; you can only set the mode of the entire directory, not of individual files.
    Mais pour moi c'est équivalent à la classe File en ne saisissant pas de chemin pour le fichier, non ?
    De même, comment sont stockés ces fichiers dans l'appli ? Sont ils conservés après sa fermeture ?


    Merci !
    Julien

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Synoyx Voir le message
    Mais pour moi c'est équivalent à la classe File en ne saisissant pas de chemin pour le fichier, non ?
    Non...

    File f = new File("toto.jpg"); est effectivement un chemin d'accès à un fichier "toto.jpg" dont on ne connait pas l'emplacement. Impossible donc de savoir ou il se situera précisément, ni même si il sera au même endroit à chaque lancement de l'application.

    Les divers getDir() permettent d'avoir l'emplacement spécifique pour les fichiers.Il existe plein d'emplacements variés pour l'application, depuis le répertoire "privé" de celle-ci (équivalent du "home" de l'utilisateur), dans lequel d'ailleurs vont se coller les SharedPreferences (xml) et SQLite databases... Jusqu'au répertoire public de chez public, accessible à tous et à toutes.
    En passant par le répertoire des images de l'utilsateur, ou de sa musique...
    Attention, la notion de "External" dans les fonctions fait référence au stockage "SD" visible quand on branche le device sur un ordinateur par exemple, et pas du tout à une carte d'extension (non supportée officiellement par Android, et donc dont l'implémentation est à la discrétion de chaque constructeur).
    De même, comment sont stockés ces fichiers dans l'appli ? Sont ils conservés après sa fermeture ?
    Comme n'importe quel système de fichier linux, heureusement qu'il sont conservés !
    Ils resistent au boot, mais pas au "formattage d'usine".

    * Fichiers Internes (Context.getFilesDir(), openFileOutput, fileList(), ...): seront détruits à la désinstallation de l'application. Dépendent de l'utilisateur du système (pour les système multi-utilisateurs). Seront aussi détruit lors d'un factory-reset. La localisation est sur la partition reservée aux applications (et les fichiers doivent éviter d'être trop volumineux).
    * Fichiers Externes "Publics" (Environment.getExternalStoragePublicDirectory()) : Indexés par le media-manager, ne devraient *jamais* être détruits (appartiennent à l'utilisateur), visibles depuis un ordinateur, résistent à un factory-reset.
    * Fichiers Externes "Privés" (Context.getExternalFilesDir()): Comme les fichiers internes, sauf que la partition est différente, et la taille disponibles plus "large".
    * Fichiers de Caches (Context..getCacheDir()): Comme les fichiers internes, sauf que le système se réserve le droit de supprimer ces fichiers si besoin.

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2011
    Messages : 47
    Par défaut
    Bonjour,

    Désolé je n'avais pas eu le temps de répondre proprement, semaine chargée



    File f = new File("toto.jpg"); est effectivement un chemin d'accès à un fichier "toto.jpg" dont on ne connait pas l'emplacement. Impossible donc de savoir ou il se situera précisément, ni même si il sera au même endroit à chaque lancement de l'application.
    En Java sous eclipse quand je fais ça, le fichier se retrouve constamment dans le dossier du logiciel, ça fonctionne plutot pas mal !


    Les divers getDir() permettent d'avoir l'emplacement spécifique pour les fichiers.Il existe plein d'emplacements variés pour l'application, depuis le répertoire "privé" de celle-ci (équivalent du "home" de l'utilisateur), dans lequel d'ailleurs vont se coller les SharedPreferences (xml) et SQLite databases... Jusqu'au répertoire public de chez public, accessible à tous et à toutes.
    En passant par le répertoire des images de l'utilsateur, ou de sa musique...
    Attention, la notion de "External" dans les fonctions fait référence au stockage "SD" visible quand on branche le device sur un ordinateur par exemple, et pas du tout à une carte d'extension (non supportée officiellement par Android, et donc dont l'implémentation est à la discrétion de chaque constructeur).
    J'ai trouvé un petit tuto pour appuyer ce que tu dis ( http://www.vogella.com/tutorials/And...e/article.html ) et je comprends un peu mieux maintenant, mais il n'y a pas la possibilité de se déplacer "clairement" dans l'arborescence ? Y a t'il au moins une liste de ces chemins prédéfinis ou se limitent t'ils aux constantes classe Environment ?




    Pour finir, si j'ai bien compris :

    Fichiers Internes -> Fichier de config, fichiers du logiciel en lui même
    Fichiers de cache -> Fichier de logs, rapports de bugs, ...
    Fichiers Externes "publics" -> En gros ce sont les photos/videos/musiques ? et donc à n'utiliser que dans le cas d'une appli influent sur ceux-ci ? Pour le media-manager cela correspond aux gestionnaires audio/vidéo/musicaux ?
    Fichiers Externes "privés" -> Donc ce sont des fichiers qui seront désinstallés en même temps que l'appli, qui peuvent êtres plus volumineux, et qui seront supprimés si l'utilisateur bidouille ses partitions android ?



    En tout cas merci pour ta réponse complète, thumb up

  4. #4
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Si tu change de répertoire avant d'appeler ton programme avec java.exe, tu verras qu'il y a de fortes chances pour que le fichier se déplace


    En général on stocke toujours un chemin relatif à un endroit connu.

    Cet endroit connu peut être le "root" (par exemple "/system/data")
    Il peut être aussi n'importe quel autre "racine" de l'environnement (global) ou du contexte (application).

    Donc plutôt que de faire:
    on peut faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new File(context.getFilesDir(),"toto.jpg");
    Il y a de bonnes chances pour que les deux donnent le même résultat, mais dans le cas du premier c'est pas garanti, et peut dépendre des implémentations. Alors que dans le second, on est sur de toujours tomber au même endroit.

  5. #5
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2011
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2011
    Messages : 47
    Par défaut
    Ok merci,

    Mais encore une question du coup ! En gros quand on fini une appli on la compile, ça nous donne un .apk.
    Ensuite on installe l'appli, et comment ça se passe pour le context.getFilesDir() ? Cela correspond au "Dossier installé" du logiciel ?

    Merci !
    Julien

  6. #6
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    Ben peu importe en fait
    Du moment que c'est un endroit privé à l'application...

    Cela peut être au même endroit que l'app elle-même (il y a peu de chance)
    En général un répertoire "/data" spécifique à l'utilisateur (chaque utilisateur a son propre répertoire de données applicatives privé)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Info] Class File Editor
    Par maminova77 dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 26/03/2006, 16h52
  2. API jackcess-1.1.3 error class file has wrong version 49.0
    Par dalio2579 dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 22/03/2006, 00h38
  3. [débutant]class File : delete/renameTo()
    Par Zazawitch dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 23/01/2006, 21h36
  4. [JAR][Applet]Truncated class file
    Par frog dans le forum Applets
    Réponses: 5
    Dernier message: 22/08/2005, 12h41
  5. [Débutant][JNDI] Erreur "bad class file"
    Par giffle dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 05/01/2005, 10h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo