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 :

Lire un fichier


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut Lire un fichier
    Bonjour à toutes et à tous,

    Dans le but d'afficher des images, je cherche dans un premier temps à lire un fichier et je tourne en rond : je ne trouve pas mon fichier.

    Mon fichier est un petit fichier texte ("Kenya.txt") que j'ai placé dans le répertoire "/sdcard/Download" (c'est le nom que me donne mon smartphone (GS2) bien que je n'y ait pas mis de sdcard !).

    J'utilise la méthode FileInputStream openFileInput (String name). Mais je lis dans de la doc :

    name The name of the file to open; can not contain path separators.

    Je donne donc le nom seul de mon fichier ("Kenya.txt") et ... l'application ne le trouve pas.

    Comment faites-vous ?

    Y a-t-il un emplacement spécifique pour mettre les fichiers à lire ?

    Merci de votre aide.

    Pierre

  2. #2
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2004
    Messages
    1 184
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 184
    Par défaut
    Bonjour,

    La méthode que tu utilises ne semble pas être faite pour lire sur le SDCARD :

    Open a private file associated with this Context's application package for reading.
    Source


    As-tu essayé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    File file = new File(Environment.getExternalStorageDirectory() +"/dossier/", "fichier.txt");
    Sachant que Environment.getExternalStorageDirectory() devrait retourner /sdcard

  3. #3
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Merci Mathieu.J pour cette information.

    Je suis complètement perdu dans toutes ces notions de lecture de fichier en Java.

    Une chose: je n'ai pas installé de sdcard dans mon smartphone, mais quand je lance l'application "Mes fichiers" de mon GS2, il m'indique en haut à gauche de l'écran : "/sccard" et liste tous les répertoires qu'il contient dont "Download". Si je clique sur "Download", l'en-tête en haut à gauche de l'écran devient : "/sdcard/Download".

    Maintenant, si je connecte mon GS2 à mon PC (Windows XP) et que j'utilise l'explorer pour voir les répertoire de mon GS2, j'obtiens : "GT-I9100P\Phone\Download" (pour le répertoire "Download").

    D'où mon incompréhension. Est-ce extérieur ou pas ?

    Voilà la méthode que j'utilise pour lire mon fichier ... et qui ne le trouve pas, sachant que le fichier "Kenya.txt" est dans le répertoire "Download" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    	public String ReadSettings(Context context){ 
            FileInputStream fIn = null; 
            InputStreamReader isr = null; 
     
            char[] inputBuffer = new char[255]; 
            String data = null; 
     
            try  { 
                fIn = context.openFileInput("Kenya.txt");       
                isr = new InputStreamReader(fIn); 
                isr.read(inputBuffer); 
                data = new String(inputBuffer); 
               //affiche le contenu de mon fichier dans un popup surgissant
                Toast.makeText(context, "Vu "+data,Toast.LENGTH_SHORT).show(); 
            } 
            catch (Exception e) {       
                Toast.makeText(context, "Settings not read",Toast.LENGTH_SHORT).show(); 
            } 
                /*finally { 
                   try { 
                          isr.close(); 
                          fIn.close(); 
                          } catch (IOException e) { 
                            Toast.makeText(context, "Settings not read",Toast.LENGTH_SHORT).show(); 
                          } 
                } */
                return data; 
           }
    Comment faire ?

    Merci beaucoup pour votre aide.

    Pierre

  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
    Sur un gs2,
    /sdcard correspond à la mémoire de 16Go du téléphone.
    /sdcard/externalSd correspond à la carte externe (si existante)

    Mais peu importe...
    Pour ouvrir un fichier en Java, c'est new FileInputStream(File f);
    File étant la réprésentation du chemin du fichier.
    Et comme expliqué par Mathieu, pour avoir ce chemin il faut passer par:
    Environment.getExternalStorageDirectory(), qui, contrairement à ce que son nom indique ne pointe pas sur une carte additionnelle mais sur un répertoire accessible à l'utilisateur.
    Donc: new File(Environment.getExternalStorageDirectory(),"nomdufichier");
    Attention ce répertoire peut ne pas être accessible si le téléphone est "monté" sur un PC par exemple.

    Si le but est d'accéder au répertoire downloads c'est:
    Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) qu'il faut utiliser.

    Lire la documentation à ce sujet


    openFileInput() donne accès aux fichiers PRIVES de l'application (l'utilisateur ne peut pas voir ce répertoire ni le lire, ni y écrire, seule l'application le peut).

  5. #5
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Mathieu.J et nicroman, je vous remercie pour ces précisions. Je n'avais pas saisi la différence entre les fichiers accessibles par "Context" et ceux par "Environment".

    C'est un peu plus clair pour moi maintenant et je suis arrivé à lire mon fichier.

    Mon but étant l'affichage d'images, je vais poursuivre mon chemin ...

    Cordialement.

    Pierre

Discussions similaires

  1. [Servlet][EJB]lire un fichier à partir de mon bean
    Par kimausoleil dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 13/02/2004, 14h26
  2. [MFC] lire un fichier en int
    Par Kevgeii dans le forum MFC
    Réponses: 3
    Dernier message: 23/01/2004, 09h32
  3. Réponses: 5
    Dernier message: 11/01/2004, 20h17
  4. Lire un fichier de 50 gb
    Par Maryves dans le forum MFC
    Réponses: 2
    Dernier message: 08/01/2004, 14h08
  5. Lire le fichier du port série
    Par saibe dans le forum Linux
    Réponses: 7
    Dernier message: 09/04/2003, 09h29

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