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

avec Java Discussion :

Encore un problème de getRessourceAsStream


Sujet :

avec Java

  1. #1
    Membre averti

    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 464
    Points : 332
    Points
    332
    Par défaut Encore un problème de getRessourceAsStream
    J'ai eu beau lire les diverses discussion sur le sujet d'accès aux ressources d'un programme via getRessourceAsStream, je n'y arrive pas.
    Je suis sous eclipse.
    J'ai cette arborescence de répertoires
    Projet
    /source...
    /donnees
    /donnes.txt
    J'ai inclus mon répertoire donnees dans le classpath.
    J'utilise cette classe là pour lire le fichier ressource :
    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
     
    public class Fichier
    {
        /**
         * renvoie le contenu d'un fichier sous forme d'une String
         * Le fichier doit être codé en UTF8
         * @param fichier le nom du fichier (avec le chemin d'accès)
         * @return le contenu = les lignes lues séparées par \n
         * @throws IOException erreur d'accés au fichier
         */
    	public static String chargerContenuTexte(String fichier) throws IOException
        {
            StringBuilder  chTmp;
            BufferedReader lect  = null;
            InputStream is = Fichier.class.getResourceAsStream(fichier);
     
            try
            {
                // Initialisations
                chTmp = new StringBuilder();
    //            lect  = new BufferedReader (new InputStreamReader (new FileInputStream (fic), "UTF-8")) ;
                lect  = new BufferedReader (new InputStreamReader (is, "UTF-8")) ;
     
                // Lire le fichier
                String ligne ;
                while ((ligne = lect.readLine()) != null)
                {
                    chTmp.append (ligne) ;
                    chTmp.append ("\n") ;
                }
     
                // Fermer le fichier
                lect.close() ;
                lect = null ;
            }
            finally
            {
                if (lect != null)
                {
                    try { lect.close(); }
                    catch (Throwable e){};
                }
            }
            // Renvoyer le texte
            return chTmp.toString() ;
        }
    }
    Avec la variable fichier qui vaut : donnees/donnees.txt.
    Lorsque je trace l'exécution, le InputStream is vaut null et donc bien sûr déclenche une erreur lors des tentatives de lecture du flux.
    Bien entendu j'ai aussi essayé avec "/donnees/donnees.txt" et même "Projet/donnees/donnees.txt".

    Qui peut me dire ce qui marche pas ?
    C'est en respectant les autres que l'on se fait respecter.

  2. #2
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Points : 4 314
    Points
    4 314
    Par défaut
    Si ton répertoire "donnees" est un des éléments de ton classpath, le chemin de ton fichier ne doit pas contenir ce répertoire.

    Le chemin vers ta ressource devrait donc être "./donnees.txt".

    Si tu veux utiliser "donnees/donnees.txt", c'est le répertoire parent de "donnees" qui doit être inclus dans le classpath (mais dans ton cas, cela n'est pas une bonne idée car le répertoire "source" serait alors également dans ce même classpath vu ton arborescence.
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  3. #3
    Membre averti

    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 464
    Points : 332
    Points
    332
    Par défaut
    Citation Envoyé par CyberChouan Voir le message
    Si ton répertoire "donnees" est un des éléments de ton classpath, le chemin de ton fichier ne doit pas contenir ce répertoire.

    Le chemin vers ta ressource devrait donc être "./donnees.txt".

    Si tu veux utiliser "donnees/donnees.txt", c'est le répertoire parent de "donnees" qui doit être inclus dans le classpath (mais dans ton cas, cela n'est pas une bonne idée car le répertoire "source" serait alors également dans ce même classpath vu ton arborescence.
    J'ai donc testé avec "./donnees.txt". Malheureusement sans plus de succès.

    la ligne : InputStream is = Fichier.class.getResourceAsStream(fichier);

    avec fichier = "./donnees.txt"

    renvoie is = null.
    C'est en respectant les autres que l'on se fait respecter.

  4. #4
    Membre averti

    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 464
    Points : 332
    Points
    332
    Par défaut
    Bon après de multiples essais, ça marche enfin. Je vous présente tous les essais que j'ai effectué avec les résultats.

    Tout d'abord il faut bien sûr que le répertoire contenant les données soit inclus dans le Classpath (clic droit sur le projet/run as/run configuration, dans la fenêtre qui s'ouvre cliquer sur l'onglet Classpath, cliquer sur User Entries/advanced/add Folder, choisir le répertoire puis validation)

    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
     
    public class Test
    {
        public static void main (String[] args)
        {
            String fichier;
            InputStream is;
            //l'arborescence du fichier D:\Workspace java\MemoryChants\donnees
            fichier = "D:\\Workspace java\\MemoryChants\\donnees\\donnees.txt";
            is = Test.class.getResourceAsStream(fichier);
            System.out.println(is + "\t" + fichier);
            fichier = "D:/Workspace java/MemoryChants/donnees/donnees.txt";
            is = Test.class.getResourceAsStream(fichier);
            System.out.println(is + "\t" + fichier);
            fichier = "donnees/donnee.txt";
            is = Test.class.getResourceAsStream(fichier);
            System.out.println(is + "\t" + fichier);
            fichier = "donnees\\donnees.txt";
            is = Test.class.getResourceAsStream(fichier);
            System.out.println(is + "\t" + fichier);
            fichier = "donnees.txt";
            is = Test.class.getResourceAsStream(fichier);
            System.out.println(is + "\t" + fichier);
            fichier = "/donnees.txt";
            is = Test.class.getResourceAsStream(fichier);
            System.out.println(is + "\t" + fichier);
            fichier = "\\donnees.txt";
            is = Test.class.getResourceAsStream(fichier);
            System.out.println(is + "\t" + fichier);
            fichier = ".\\donnees.txt";
            is = Test.class.getResourceAsStream(fichier);
            System.out.println(is + "\t" + fichier);
            fichier = "./donnees.txt";
            is = Test.class.getResourceAsStream(fichier);
            System.out.println(is + "\t" + fichier);
        }
    }
    et le résultat :
    null D:\Workspace java\MemoryChants\donnees\donnees.txt
    null D:/Workspace java/MemoryChants/donnees/donnees.txt
    null donnees/donnee.txt
    null donnees\donnees.txt
    null donnees.txt
    java.io.BufferedInputStream@723d7c /donnees.txt
    null \donnees.txt
    null .\donnees.txt
    null ./donnees.txt

    Comme on le remarque, dans ce cas de figure, il faut entrer le nom de la ressource sous la forme "/donnees.txt"
    C'est en respectant les autres que l'on se fait respecter.

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

Discussions similaires

  1. Encore des problèmes avec le BDE
    Par Flint dans le forum C++Builder
    Réponses: 19
    Dernier message: 31/12/2007, 23h26
  2. [Dates] Encore un problème de date
    Par philippef dans le forum Langage
    Réponses: 1
    Dernier message: 12/01/2006, 21h30
  3. Encore des problèmes de variables
    Par mat99 dans le forum Langage
    Réponses: 1
    Dernier message: 18/11/2005, 10h26
  4. Réponses: 8
    Dernier message: 10/08/2004, 11h49
  5. Encore un probléme de date avec TADO !
    Par bNoureddine dans le forum Bases de données
    Réponses: 2
    Dernier message: 22/02/2004, 18h22

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