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
    Futur Membre du Club
    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
    Points : 8
    Points
    8
    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
    Expert confirmé
    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
    Points : 4 166
    Points
    4 166
    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
    Futur Membre du Club
    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
    Points : 8
    Points
    8
    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
    Expert confirmé
    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
    Points : 4 166
    Points
    4 166
    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
    Futur Membre du Club
    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
    Points : 8
    Points
    8
    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
    Expert confirmé
    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
    Points : 4 166
    Points
    4 166
    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
    Expert confirmé
    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
    Points : 4 166
    Points
    4 166
    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
    Futur Membre du Club
    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
    Points : 8
    Points
    8
    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
    Futur Membre du Club
    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
    Points : 8
    Points
    8
    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
    Expert confirmé
    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
    Points : 4 166
    Points
    4 166
    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
    Futur Membre du Club
    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
    Points : 8
    Points
    8
    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
    Expert confirmé
    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
    Points : 4 166
    Points
    4 166
    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
    Points : 13 670
    Points
    13 670
    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
    Futur Membre du Club
    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
    Points : 8
    Points
    8
    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 : 40
    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
    Points : 4 240
    Points
    4 240
    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.
    Si vous jugez mon post utile dans la résolution de votre problème, n'hésitez pas à utiliser le système de vote afin d'améliorer la qualité du forum

  16. #16
    Futur Membre du Club
    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
    Points : 8
    Points
    8
    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