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 :

Charger un fichier en tant que ressource


Sujet :

Entrée/Sortie Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 198
    Points : 85
    Points
    85
    Par défaut Charger un fichier en tant que ressource
    Bonjour,

    dans mon application a la racine j'ai un fichier Config.ini

    et je l'appelle comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    File f = new File("Config.ini");
    if (f.exists()) {
        config = new ConfigMgt(f, '#');
    }
    else {
        JOptionPane.showMessageDialog(null,
          "The configuration file does not exist", "Warning",
          JOptionPane.WARNING_MESSAGE);
    }
    après j'ai crer un jar exécutable, et quand je le lance il rentre dans le else et m'affiche donc la JOptionPane

    pourtant le fichier se trouve bien dans le jar.

    je suppose que je l'appelle mal...

    merci de vos réponses

  2. #2
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Pour employer des fichiers présents dans un jar, tu es obligé de les charger en tant que ressource

    cf la faq

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 198
    Points : 85
    Points
    85
    Par défaut
    mm oui, mais alors je ne sais pas creer un type File, comment faire?

    pcq je dois véridier si il existe, j'ai testé en faisant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Object fi = getClass().getResource("Config.ini");
       System.out.println(fi);
    ça retourne null

    je suis un peu perdue là

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 198
    Points : 85
    Points
    85
    Par défaut
    jm'en sors pas..

    une aide?

  5. #5
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Points : 552
    Points
    552
    Par défaut
    Bonjour,

    Je pense que c'est le chemin d'accès de tes fichiers qui est la cause du problème:

    Exemple


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     public void lireFichier(String entree) {
    try { URL fileURL = getClass().getResource(entree);
    BufferedReader in = new BufferedReader(new InputStreamReader(fileURL.openConnection().getInputStream()));
     in.close();
    } catch (IOException e) {
    System.out.println("Probleme lecture du fichier: " + e.getMessage());
    }
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     lireFichier("data/inf.txt");
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     jar..data....inf.txt..<package>....*.class


    Billy

  6. #6
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    As-tu lu la Q/R de la FAQ ???
    Où se trouve ton fichier dans le Jar ? Depuis quelle classe (nom exacte) tu exécutes ce code ?

    a++

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 198
    Points : 85
    Points
    85
    Par défaut
    Moi ce je veux c'est pouvoir avoir un fichier de type File car je veux tester sa présence et je dois aussi le faire passer a une methode

    oui j'ai mu la FAQ

    mais quand meme du mal

    le fichier se trouve au meme endroit ke les dossier bin et lib (dc a la racine)

    j'exécute ce code depuis be.microresearch.frame.Home

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 198
    Points : 85
    Points
    85
    Par défaut
    heuuuu, personne ne sait m'aider?

  9. #9
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par delph1983
    Moi ce je veux c'est pouvoir avoir un fichier de type File car je veux tester sa présence et je dois aussi le faire passer a une methode
    Mais File représente un fichier sur ton système. Or ici ton fichier n'en est pas vraiment un puisque'il fait partie d'une archive (tu as un seul fichier pour ton système : le fichier Jar).

    le fichier se trouve au meme endroit ke les dossier bin et lib (dc a la racine)

    Donc, et comme c'est indiqué dans la FAQ, il faut que tu utilises le chemin relatif par rapport à la racine de ton Jar :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getClass().getResource("/Config.ini");
    Sinon il va te chercher le fichier dans le même répertoire que ta classe, c'est à dire sous /be/microresearch/frame/Config.ini...


    Enfin, si getResource() te renvoit une URL null c'est que le fichier n'a pas été trouvé...

    a++

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 198
    Points : 85
    Points
    85
    Par défaut
    haaaaaaaa ok je comprend mieux maintenant, mais c'est un peu embetant, pcq j'ai toute un classe qui lit ce fichier et tout mais a partir du type File

  11. #11
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par delph1983
    haaaaaaaa ok je comprend mieux maintenant, mais c'est un peu embetant, pcq j'ai toute un classe qui lit ce fichier et tout mais a partir du type File
    C'est ce qu'il ne faut jamais faire

    En général il vaut mieux tout basé sur les InputStream/OutputStream :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        public void maMethode(InputStream stream) throws IOException {
     
            /* Boucle de lecture */
     
        }
    Cela te permet de lire les infos depuis n'importe quel type de source (et éventuellement d'en changer)...

    Bien sûr rien ne t'empêche de surcharger cette méthode afin de l'utiliser plus facilement, par exemple avec un File :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        public void maMethode(File file) throws FileNotFoundException, IOException {
     
            InputStream stream = new FileInputStream(file);
            try {
                maMethode(stream);
            } finally { stream.close(); }
        }
    Ou une URL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        public void maMethode(URL url) throws IOException {
     
            InputStream stream = url.openStream();
            try {
                maMethode(stream);
            } finally { stream.close(); }
        }
    a++

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 198
    Points : 85
    Points
    85
    Par défaut
    ha ben je suis un peu dans la mouise

    la classe dont je parle c'est en fait une classe que j'ai récupérer quelque part, celle ci traite un fichier de configuration. c'est pour ça que tout est avec des File.

    donc c'est à dire que dans cette classe, on crée un fichier temp File.createTempFile, ou bien il lit les info qu'il y a apres le =
    toute des choses comme ça

    donc ma question est: est-il possible de faire ce genre de chose avec un InputStream?

  13. #13
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par delph1983
    donc c'est à dire que dans cette classe, on crée un fichier temp File.createTempFile,
    A quoi peut bien servir de créer un fichier temporaire pour lire un fichier ????

    Citation Envoyé par delph1983
    ou bien il lit les info qu'il y a apres le =
    toute des choses comme ça
    C'est à dire exactement ? Parce que si c'est pour lire un simple fichier avec des clef=valeur tu peux directement utiliser la classe Properties...

    Citation Envoyé par delph1983
    donc ma question est: est-il possible de faire ce genre de chose avec un InputStream?
    J'ai du mal à saisir ce que fait exactement ta classe... donne plus de détail...

    a++

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 198
    Points : 85
    Points
    85
    Par défaut
    en fait mon fichier contient:
    #Config of Indexation application
    #Root where the indexation will begin
    rootBegin1 = H:\Delph\TFE
    rootBegin2 = D:\DVA\Test
    rootBegin3 =
    rootBegin4 =
    #Root where the index will be stored
    rootStore = H:\indexation\IndexGen
    #Extensions of the files to index
    fileToIndex = pps,txt,html
    doc = yes
    xls = yes
    pdf = yes
    ppt = yes
    #Root where the file that contains the StopWords will be stored
    rootStopWords1 = H:\stopWordsFR.txt
    rootStopWords2 = H:\stopWordsEN.txt
    rootStopWords3 =
    #Image
    logo = image\IDO.gif
    #Log file
    rootLog = H:\indexation\logs\IndexLog.txt
    rootLog2 = H:\indexation\logs\LogError.txt
    #Date of last indexation
    indexDate = Thu Apr 27 13:19:48 CEST 2006
    #Time of the scheduler
    schedul =
    #Size of the indexed files
    size = 7084
    je dois dc pouvoir ajouter et modifier les valeur et accéder à ces valeurs.
    pour ça la classe passe toutes les lignes qui commencent par #
    et regarde la clé=valeur.
    je ne savais pas que c'est ce que fesais la classe Properties, c'est donc possible de l'appliquer sur un stream alors?

    le fichier temporaire est créer pour travailler dessus et ensuite quand on ets sur de le changer on change le fichier de base

  15. #15
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par delph1983
    je ne savais pas que c'est ce que fesais la classe Properties, c'est donc possible de l'appliquer sur un stream alors?
    C'est exactement ce que fais la classe Properties

    Tu n'as pas besoin de créer de fichier temporaire car la classe Properties charge tout en mémoire...

    Le seul défaut (pour moi), c'est que lorsque tu sauvegardes les changements les commentaires et l'ordre des clefs sont perdus...


    a++

    PS : Enfin je te rappelle que tu ne peux pas modifier un fichier à l'intérieur du Jar de ton application...

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 198
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par adiGuba
    PS : Enfin je te rappelle que tu ne peux pas modifier un fichier à l'intérieur du Jar de ton application...
    ha mince, la ça va plus du tout.
    donc en gros mon fichier de config doit se trouver a part du jar si je veux pouvoir le modifier. mais la ça devient lourd.
    (je suis obligée de faire un jar car je transforme mon appli en service)

    comment on fait alors quand on veut installer une appli avec un fichier de config?

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 198
    Points : 85
    Points
    85
    Par défaut
    une idée?

  18. #18
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    J'utiliserais deux fichiers :
    • un fichier ressource dans le Jar qui contiendrait les valeurs par défaut.
    • un fichier sur le système de fichier (par exemple dans System.getProperty("user.home")) qui contiendrai les valeurs optionnelles et les sauvegardes...

    a++

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 198
    Points : 85
    Points
    85
    Par défaut
    ha wi, ok! je vais essayer de faire ça

    un grand merci à toi en tout cas!

  20. #20
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 198
    Points : 85
    Points
    85
    Par défaut
    j'ai des erreurs pour mes images (meme avt de faire le jar).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ImageIcon im = new ImageIcon(getClass().getResource("/image/configuration.jpg"));
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    java.lang.NullPointerException
    at javax.swing.ImageIcon.<init>(ImageIcon.java:138)
    at be.microresearch.frame.Home.<init>(Home.java:98)
    at be.microresearch.frame.MainIndex.main(MainIndex.java:10)
    Exception in thread "main" 
    
    et l'arborescence
    Images attachées Images attachées  

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Charger un Type en tant que ressource
    Par Bobbledople dans le forum C#
    Réponses: 0
    Dernier message: 05/08/2009, 11h55
  2. Réponses: 4
    Dernier message: 09/03/2009, 10h03
  3. [C#] Images PNG en tant que ressources
    Par GoldenEye dans le forum Windows Forms
    Réponses: 4
    Dernier message: 12/01/2006, 09h50
  4. sauvegarde de fichiers en tant que blob
    Par ha_mido dans le forum Administration
    Réponses: 3
    Dernier message: 21/11/2005, 17h48
  5. image en tant que ressource ..
    Par ilimo dans le forum Windows
    Réponses: 4
    Dernier message: 03/06/2004, 16h35

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