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

Entrée/Sortie Java Discussion :

Problème importation fichier texte dans un jar


Sujet :

Entrée/Sortie Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Problème importation fichier texte dans un jar
    Bonjour,

    J'ai programmé une application qui lit des fichiers textes situé dans le dossier. Seulement quand je transforme le programme, il n'est plus capable d'aller chercher ces fichiers. J'ai donc utiliser ClassLoader.getSystemResourceAsStream("nomfichier.txt") et transformer mon FileReader en InputStremReader(inputStream). Mais ça marche toujours pas il me ressort :
    Exception in thread "main" java.lang.NullPointerException
    at java.io.Reader.<init>(Unknown Source)
    at java.io.InputStreamReader.<init>(Unknown Source)


    Je suppose que c'est mon appelation dans le ClassLoader qui bug mais je sais pas comment corriger.
    Je vous donne le code pour que ce soit plus clair :

    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
    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
    public static Ligne lireFichier(InputStream inputStream){
    		int nombreStation=0;
    		String line;
    		try{
    			Scanner sc = new Scanner(new InputStreamReader(inputStream));
    			while(sc.hasNextLine()){
    				nombreStation++;
    				line=sc.nextLine();
    			}
    		}
    		finally{;}
    		Arret[] ligne=new Arret[nombreStation];
     
    		try{
    			Scanner sc = new Scanner(new InputStreamReader(inputStream));
    			int i = 0;
    			while(sc.hasNextLine()){
    				line=sc.nextLine();
    				StringTokenizer st = new StringTokenizer(line, "\t");
    				String arret=st.nextToken();
    				String tempsString=st.nextToken();
    				double temps=Double.parseDouble(tempsString);
    				ligne[i]=new Arret(arret,temps);
    				i++;
    			}
    		}
    		finally{;}
    		String nomLigne=" ";
    		Ligne ligneCree = new Ligne(ligne, nomLigne);
     
    		return ligneCree;
    	}
     
    	public static Reseau creationDuReseau(){
    		Ligne[] ligneMetro = new Ligne[20];
    		ligneMetro[0]=lireFichier(ClassLoader.getSystemResourceAsStream("/TP-Projet Rémy/Ligne1.txt"));
    		ligneMetro[1]=lireFichier(ClassLoader.getSystemResourceAsStream("/workspace/TP-Projet Rémy/Ligne2.txt"));
    		ligneMetro[2]=lireFichier(ClassLoader.getSystemResourceAsStream("/workspace/TP-Projet Rémy/Ligne3.txt"));
    		ligneMetro[3]=lireFichier(ClassLoader.getSystemResourceAsStream("/workspace/TP-Projet Rémy/Ligne3bis.txt"));
    		ligneMetro[4]=lireFichier(ClassLoader.getSystemResourceAsStream("/workspace/TP-Projet Rémy/Ligne4.txt"));
    		ligneMetro[5]=lireFichier(ClassLoader.getSystemResourceAsStream("/workspace/TP-Projet Rémy/Ligne5.txt"));
    		ligneMetro[6]=lireFichier(ClassLoader.getSystemResourceAsStream("/workspace/TP-Projet Rémy/Ligne6.txt"));
    		ligneMetro[7]=lireFichier(ClassLoader.getSystemResourceAsStream("/workspace/TP-Projet Rémy/Ligne7bisn1.txt"));
    		ligneMetro[8]=lireFichier(ClassLoader.getSystemResourceAsStream("/workspace/TP-Projet Rémy/Ligne7bisn2.txt"));
    		ligneMetro[9]=lireFichier(ClassLoader.getSystemResourceAsStream("/TP-Projet Rémy/Ligne7n1.txt"));
    		ligneMetro[10]=lireFichier(ClassLoader.getSystemResourceAsStream("/TP-Projet Rémy/Ligne7n2.txt"));
    		ligneMetro[11]=lireFichier(ClassLoader.getSystemResourceAsStream("/TP-Projet Rémy/Ligne8.txt"));
    		ligneMetro[12]=lireFichier(ClassLoader.getSystemResourceAsStream("/TP-Projet Rémy/Ligne9.txt"));
    		ligneMetro[13]=lireFichier(ClassLoader.getSystemResourceAsStream("/TP-Projet Rémy/Ligne10n1.txt"));
    		ligneMetro[14]=lireFichier(ClassLoader.getSystemResourceAsStream("/TP-Projet Rémy/Ligne10n2.txt"));
    		ligneMetro[15]=lireFichier(ClassLoader.getSystemResourceAsStream("/TP-Projet Rémy/Ligne11.txt"));
    		ligneMetro[16]=lireFichier(ClassLoader.getSystemResourceAsStream("TP-Projet Rémy/Ligne12.txt"));
    		ligneMetro[17]=lireFichier(ClassLoader.getSystemResourceAsStream("TP-Projet Rémy/Ligne13n1.txt"));
    		ligneMetro[18]=lireFichier(ClassLoader.getSystemResourceAsStream("TP-Projet Rémy/Ligne13n2.txt"));
    		ligneMetro[19]=lireFichier(ClassLoader.getSystemResourceAsStream("TP-Projet Rémy/Ligne14.txt"));
    		Reseau reseauMetro= new Reseau(ligneMetro);
     
    		return reseauMetro;
    	}

    Et est-ce qu'il faut donner le chemin d'accès complet même pour un jar? Si je veux utiliser ce programme sur un autre ordinateur, il va falloir que je modifie le programme?


    Merci d'avance pour votre réponse.

  2. #2
    Membre chevronné
    Avatar de professeur shadoko
    Homme Profil pro
    retraité nostalgique Java SE
    Inscrit en
    Juillet 2006
    Messages
    1 257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : retraité nostalgique Java SE

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 257
    Points : 1 855
    Points
    1 855
    Par défaut
    je crois avoir déjà donné cette référence pour nommer ce genre de ressource
    Ici ...
    ce que je ne sais pas c'est ce que va donner un caractère <espace> comme ça au milieu d'un élément d'URL (je suis intéressé par la réponse )
    - c'est "TP-Projet Rémy/Ligne13n1.txt" qui me fait poser la question...-

  3. #3
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Tes fichier sont en dehors du classpath de ton application. getRessourceAsStream sert à lire des éléments du classpath. En l'occurence, ici, il faut que tu regroupe tes ficheir dans un dossier que tu indique dans ton IDE comme faisant partie du "build path". Ton erreur en pratique venant d'un inputstream null.



    Citation Envoyé par professeur shadoko Voir le message
    ce que je ne sais pas c'est ce que va donner un caractère <espace> comme ça au milieu d'un élément d'URL (je suis intéressé par la réponse )
    aucune influence

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bon je suis désolé mais j'ai toujours pas tout bien compris. Je suis allé dans eclipse et j'ai fait clic droit->buildpath->Link source. Là j'ai donné le dossier avec tout mes fichiers textes et lui ai donné le nom de lignemetro. Je précise que j'ai crée le dossier, nommées "ligne", où sont contenus les lignes dans le dossier de mon programme avec le src et le bin.
    Après j'ai récupéré les noms en faisant copy Qualified name et je les ai copié dans mes classLoader mais j'ai toujours la même erreur.
    Est-ce que quelqu'un a une idée?

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    le Qualiified name n'a rien a voir avec ce que vois le classloader


    Supposons que tu aie ajouté à tes ressources (via add buildpath) le folder appelé "documents" et que ce folder documents contienne un fichier "monfichier.txt", tu devra faire ceci dans ton code


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    classloader.getResourceAsStream("/monfichier.txt");

    Dans mon cas, par exemple, j'ai un répertoire "src/rsc/main" comme ressource, j'ai un fichier dont, si j'affiche sont Qualifiedname, j'ai "/monprojet/src/rsc/main/be/monfichier.txt". Dans ce cas précis, je dois fournir à mon classloader la string "/be/monfichier.txt" puisque c'est en définitive l'endroit ou sera stocké mon fichier dans le jar

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 342
    Points : 419
    Points
    419
    Par défaut
    si ton fichier est au meme niveau que t'a class dans ton jar tu peut aussi utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MaClass.class.getResourceAsStream("monfichier.txt");
    comme cela tu n'a plus de probleme de path

Discussions similaires

  1. [MySQL-5.5] Problème d'import fichier texte dans phpmyadmin
    Par Mut dans le forum Administration
    Réponses: 1
    Dernier message: 17/05/2013, 19h16
  2. Importer fichier texte dans Table
    Par cjacquel dans le forum Access
    Réponses: 1
    Dernier message: 18/01/2007, 18h07
  3. Importer fichier texte dans base Access
    Par Mymi dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 15/08/2006, 21h21
  4. probleme avec un import fichier texte dans mysql
    Par xodeax dans le forum Requêtes
    Réponses: 2
    Dernier message: 04/07/2006, 14h24
  5. import fichier texte dans table contrainte
    Par philippe281281 dans le forum Outils
    Réponses: 5
    Dernier message: 14/06/2006, 18h01

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