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 XML : java.io.FileNotFoundException


Sujet :

Android

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 18
    Par défaut Lire un fichier XML : java.io.FileNotFoundException
    Bonjour à tous,

    J'essai actuelement de lire le contenu d'un fichier XML via un parser.
    Le soucis que je rencontre, c'est que lorsque je tente de l'ouvrir, l'erreur est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.io.FileNotFoundException: /PTIGestionPV/assets/region.xml (No such file or directory)
    Mon fichier XML du nom de "region.xml" se trouve dans le dossier assets de mon projet. Lorsque je vais dans ses propriétés, le path y est mentionné. C'est celui-ci que j'ai mis dans ma ligne de code à savoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FileInputStream input = new FileInputStream("/PTIGestionPV/assets/region.xml");
    Quelqu'un aurait-il une idée sur comment corriger l'erreur ?

    Cordialement,

    Yerffoj21

  2. #2
    Membre Expert
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Par défaut
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    FileInputStream input = new FileInputStream("file:///android_asset/region.xml");
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 18
    Par défaut
    Citation Envoyé par Hephaistos007 Voir le message
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    FileInputStream input = new FileInputStream("file:///android_asset/region.xml");
    Merci de la réponse.
    J'ai essayé ta solution, mais le problème est toujours le même.
    J'ai essayé en ajoutant un s à "android_assets" (voir plus bas) mais même constat.

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    FileInputStream input = new FileInputStream("file:///android_assets/region.xml");

  4. #4
    Membre Expert
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Par défaut
    A tout hasard, essayes cet autre objet d'ouverture:
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    FileInputStream input = new openFileInput("file:///android_asset/region.xml");
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 18
    Par défaut
    Citation Envoyé par Hephaistos007 Voir le message
    A tout hasard, essayes cet autre objet d'ouverture:
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    FileInputStream input = new openFileInput("file:///android_asset/region.xml");
    Voici le message que j'obtient :


  6. #6
    Membre Expert
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Par défaut
    Exact, j'ai déconné, c'est :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    FileInputStream input = this.openFileInput("file:///android_asset/region.xml");
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  7. #7
    Membre Expert
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Par défaut
    Encore plus simple :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    InputStream is = getAssets().open("region.xml");
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 18
    Par défaut
    Ma classe est static, le this semble donc ne pas fonctionner dedans.

    J'ai donc essayé d'enlever le static, mais un autre message d'erreur apparait.
    Est-ce JAVA qui est si compliqué, ou juste la programmation Android ?

    Je met le code source de ma classe (ainsi que quelques essai...) au cas où tu repère quelque chose qui ne va pas...

    Code JAVA : 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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
     
    package lgt.ptino3.gestionpv;
     
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.util.ArrayList;
     
    import javax.xml.parsers.ParserConfigurationException;
    import javax.xml.parsers.SAXParser;
    import javax.xml.parsers.SAXParserFactory;
     
    import org.xml.sax.SAXException;
    import org.xml.sax.helpers.DefaultHandler;
     
    import android.R;
    import android.app.Application;
    import android.content.Context;
    import android.content.res.AssetManager.AssetInputStream;
    import android.graphics.Path.Direction;
    import android.util.Log;
     
    public class conteneurDeDonnees {
     
    	static public Context context;
     
    	public conteneurDeDonnees() {
    	}
     
    	public static ArrayList<Region> getEtablissements() {
     
    		SAXParserFactory fabrique = SAXParserFactory.newInstance();
    		// fabrique.setValidating(true);
    		// fabrique.setNamespaceAware(true);
    		SAXParser parseur = null;
    		ArrayList<Region> lesRegion = null;
    		try {
    			// On "fabrique" une instance de SAXParser
    			parseur = fabrique.newSAXParser();
    		} catch (ParserConfigurationException e) {
    			e.printStackTrace();
    		} catch (SAXException e) {
    			e.printStackTrace();
    		}
     
    		DefaultHandler handler = new ParserXMLHandler();
    		try {
    			try {
     
    				// Test 1
    				// FileInputStream input = new FileInputStream(
    				// "file:///android_asset/region.xml");
    				// Test 2
    				// FileInputStream input = new FileInputStream(
    				// "file:///android_assets/region.xml");
    				// Test 3
    				// FileInputStream input = new FileInputStream(
    				// "region.xml");
    				// Test 4
    				// FileInputStream input = new FileInputStream(
    				// "asset/region.xml");
     
    				// Test 5
    				// FileInputStream input =
    				// this.openFileInput("file:///android_asset/region.xml");
     
    				FileInputStream input = new FileInputStream("asset/region.xml");
     
    				if (input == null) {
    					Log.e("Erreur Android", "null");
    				} else {
    					parseur.parse(input, handler);
    					lesRegion = ((ParserXMLHandler) handler).getData();
    				}
    			} catch (FileNotFoundException f) {
    				f.printStackTrace();
    			}
    		} catch (SAXException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
     
    		return lesRegion;
     
    	}
     
    }

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 18
    Par défaut
    Citation Envoyé par Hephaistos007 Voir le message
    Encore plus simple :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    InputStream is = getAssets().open("region.xml");
    Même soucis, Eclipse me propose de créer la méthode.

  10. #10
    Membre Expert
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Par défaut
    Chez toi c'est :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    InputStream is = context.getAssets().open("region.xml");
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 18
    Par défaut
    Citation Envoyé par Hephaistos007 Voir le message
    Chez toi c'est :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    InputStream is = context.getAssets().open("region.xml");
    J'ai testé. Je lance en debug et regarde étape par étape. Arrivé à cette instruction, une fenêtre s'ouvre sur laquel je peut voir écrit en rouge :


  12. #12
    Membre Expert
    Avatar de Hephaistos007
    Profil pro
    Enseignant Chercheur
    Inscrit en
    Décembre 2004
    Messages
    2 493
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 493
    Par défaut
    Ca, ca ressemble d'avantage à un problème de config au niveau d'Eclipse...
    Il vaut mieux mobiliser son intelligence sur des conneries que mobiliser sa connerie sur des choses intelligentes --- devise SHADOKS

    Kit de survie Android : mon guide pour apprendre à programmer sur Android, mon tutoriel sur les web services et enfin l'outil en ligne pour vous faire gagner du temps - N'oubliez pas de consulter la FAQ Android

  13. #13
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Par défaut
    Citation Envoyé par Hephaistos007 Voir le message
    Ca, ca ressemble d'avantage à un problème de config au niveau d'Eclipse...
    Plutôt un debug trop profond, non ? Là tu n'es pas sur ton code mais sur des méthodes de l'API Android.
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  14. #14
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 18
    Par défaut
    Je ne pense pas que le problème vient du debug, vu que debug ou non l'application crash...

  15. #15
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Par défaut
    Le langage n'est pas compliqué, ni la plateforme.
    Là il s'agit d'un problème de conception de l'application.

    En gros : quand tu ouvres ton fichier, il te faut un "context" applicatif.
    Ici tu as un classe static qui fait de l'ouverture de fichier. il ne peux donc pas y avoir de context.
    Typiquement deux approches :
    Soit tu passes le contexte à ta méthode static d'ouverture de fichier (et du coup, tu ouvre ton fichier à partir de ce context)
    Soit tu ouvre ton fichier dans ton context et tu transferts ton flux de lecture vers ta méthode static de parsing.

  16. #16
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2012
    Messages : 18
    Par défaut
    Tout d'abord, merci à vous pour votre aide.

    Ephaistos m'a indiqué la bonne ligne de code, et MrDuChnok a trouvé ce qui n'allait pas.

    Parmis ses 2 solutions, j'ai choisit la première et ai donc passer le contexte en paramètre de ma méthode ce qui donne lors de l'appel dans ma classe main.java :
    Code JAVA : Sélectionner tout - Visualiser dans une fenêtre à part
    ArrayList<Region> listeRegions = conteneurDeDonnees.getEtablissements(this);

    Je laisse le code final de ma classe, au cas où quelqu'un ayant le même soucis tombe sur ce topic.

    Cordialement, Yerffoj21


    Code JAVA : 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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    package lgt.ptino3.gestionpv;
     
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.ArrayList;
     
    import javax.xml.parsers.ParserConfigurationException;
    import javax.xml.parsers.SAXParser;
    import javax.xml.parsers.SAXParserFactory;
     
    import org.xml.sax.SAXException;
    import org.xml.sax.helpers.DefaultHandler;
     
    import android.R;
    import android.app.Application;
    import android.content.Context;
    import android.content.res.AssetManager.AssetInputStream;
    import android.graphics.Path.Direction;
    import android.util.Log;
     
    public class conteneurDeDonnees {
     
    	public conteneurDeDonnees() {
     
    	}
     
    	public static ArrayList<Region> getEtablissements(Context context) {
     
     
    		SAXParserFactory fabrique = SAXParserFactory.newInstance();
    		// fabrique.setValidating(true);
    		// fabrique.setNamespaceAware(true);
    		SAXParser parseur = null;
    		ArrayList<Region> lesRegion = null;
    		try {
    			// On "fabrique" une instance de SAXParser
    			parseur = fabrique.newSAXParser();
    		} catch (ParserConfigurationException e) {
    			e.printStackTrace();
    		} catch (SAXException e) {
    			e.printStackTrace();
    		}
     
    		DefaultHandler handler = new ParserXMLHandler();
    		try {
    			try {
     
    				InputStream input = context.getAssets().open("region.xml");
     
    				if (input == null) {
    					Log.e("Erreur Android", "null");
    				} else {
    					parseur.parse(input, handler);
    					lesRegion = ((ParserXMLHandler) handler).getData();
    				}
    			} catch (FileNotFoundException f) {
    				f.printStackTrace();
    			}
    		} catch (SAXException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
     
    		return lesRegion;
     
    	}
     
    }

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

Discussions similaires

  1. Lire un fichier XML en Java
    Par manouch95 dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 18/12/2014, 14h38
  2. [JDOM] lire un fichier XML depuis java
    Par tresor999 dans le forum Format d'échange (XML, JSON...)
    Réponses: 6
    Dernier message: 29/02/2008, 20h38
  3. Créer et lire un fichier xml
    Par Bruno1905 dans le forum C++Builder
    Réponses: 14
    Dernier message: 13/06/2007, 11h11
  4. lire un fichier xml à partir d'une application java
    Par diamonds dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 23/01/2007, 18h23
  5. Comment lire un fichier XML ?
    Par jeromelef dans le forum Débuter
    Réponses: 6
    Dernier message: 29/06/2005, 15h52

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