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 :

Comment la classe classe File fabrique le chemin ?


Sujet :

Android

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2008
    Messages : 757
    Points : 572
    Points
    572
    Par défaut Comment la classe classe File fabrique le chemin ?
    Bonjour,

    Dans l'appli que je m'acharne à créer, il y a cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    		File drawableFile = new     File(getApplicationContext().getFilesDir().getAbsolutePath() + chemin);
    Lorsque j'exécute en mode DEBUG, la variable String chemin vaut par exemple ceci : "/photos/poule_336" et la variable drawableFile prend cette valeur :
    "/data/data/com.lettres/files/photos/poule_336".

    Donc je me doute bien que la classe File a donc construit un chemin avec la variable "chemin" à laquelle a été ajouté un début ("/data/data/com.lettres/files").

    Ce que je trouve bizare, c'est que dans mon appli, je n'ai pas de dossier "files" comme indiqué dans "/data/data/com.lettres/files/"

    quelqu'un peut-il m'apporter de l'aide sur ce sujet , mon but étant de pouvoir aller chercher des photos dans un dossier "photos" que j'ai mis dans /res


    Merci !
    OS : LinuxMint 20

  2. #2
    Membre régulier Avatar de gloax29
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2002
    Messages : 55
    Points : 70
    Points
    70
    Par défaut
    bonjour,
    tes photos fonts parties du projet dans un package ou a part sur un stockage?

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2008
    Messages : 757
    Points : 572
    Points
    572
    Par défaut
    Bonjour et merci pour votre réponse,

    Les photos font partie du projet. Elles sont dans un dossier que j'ai créé dans /res et qui s'apelle /photos.
    OS : LinuxMint 20

  4. #4
    Expert éminent

    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
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Je pense que la question est mal intitulée....

    File *est* un chemin (absolu) vers un fichier ou un répertoire.

    Il est très étonnant d'avoir un chemin relatif qui commence par '/' (à moins qu'il n'ait été fabriqué à la main), normalement la concaténation de chemin se fait par le constructeur File(File,String).

    Ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    File drawableFile = new     File(getApplicationContext().getFilesDir(),chemin);
    Aura le même résultat, à condition bien sur que "chemin" ne commence pas par un '/' (ce qui indique la racine du filesystem dans linux).

    Maintenant, à propose de "getFilesDir()". Celui renvoit le "File" qui correspond aux fichiers privés de l'application.
    (sa localisation dépend de l'implémentation, mais en général c'est "/xxxx/data/package.name/files" le premier /xxxx correspond à la partition "user" (celle qui est formatée lors d'un wipe du téléphone), "data" qu'on parle des données d'applications, "package.name" l'identifiant de l'application, et "/files" des fichiers généraux (getFilesDir()).

    Le code "normal" d'utilisation est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    File filesDir = getContext().getFilesDir();  // <= getApplicationContext() est rarement utile
    if (filesDir.mkdirs()) {
          File drawableFile = new File(filesDir, relativePath);
          ... on fait un truc sur drawableFile
    } else {
        // probleme !
    }


    Bien entendu, ces fichiers n'ont rien à voir avec les ressources qui ne sont pas accessibles par le filesystem de toute manière.
    Le seul moyen d'accéder aux ressources est de passer par l'objet "Resources":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Resources res = getContext().getResources();
    InputStream is = null;
    try {
       int idres = res.getIdentifier(...); // c'est ici qu'on aura le "chemin" mais dans ce cas, plutot que de stocker des chemins, mieux vaut stocker des IDs directement.
       is = res.openRawResource(idres);
        ... utilisation du stream;
    } finally {
       if (is != null) try { is.close(); } catch (IOException ex) { }
    }
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  5. #5
    Membre régulier Avatar de gloax29
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2002
    Messages : 55
    Points : 70
    Points
    70
    Par défaut
    bonjour,
    , très bien expliqué.

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2008
    Messages : 757
    Points : 572
    Points
    572
    Par défaut
    Merci pour ces explications !!!
    OS : LinuxMint 20

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

Discussions similaires

  1. ArrayList<Class> class class.setString()
    Par Onelove dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 31/08/2014, 19h42
  2. [Reflexion] Comment récupérer une class via son chemin python
    Par anthyme dans le forum Général Python
    Réponses: 2
    Dernier message: 27/12/2007, 13h16
  3. Réponses: 5
    Dernier message: 15/02/2005, 10h32
  4. [debutant] Comment ajouter des .class ?
    Par Slein dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 30/04/2004, 14h30
  5. [Plugin] Comment instantier certaines classes de ANT ?
    Par relivio dans le forum Eclipse Platform
    Réponses: 2
    Dernier message: 01/04/2004, 15h45

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