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

AWT/Swing Java Discussion :

[JAR] Pourquoi le programme est il incapable de voir les fichiers dans le JAR


Sujet :

AWT/Swing Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    340
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 340
    Points : 139
    Points
    139
    Par défaut [JAR] Pourquoi le programme est il incapable de voir les fichiers dans le JAR
    J'ai mon programme qui est dans un JAR. Déjà, j'ai dû sortir la librairie JDIC du jar, sans quoi elle n'est pas vue. Mais je me rends compte que d'autres fichiers ne sont pas vu non plus : l'icone de mon prgm icone.jpg (./), le fichier d'aide aide.html (qui est dans le dossier ./aide)
    Voici l'arborescence du projet sous eclipse :

    et voici les lignes où je créé l'icone ou le File du fichier d'aide :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    icone=Toolkit.getDefaultToolkit().getImage("./icone.gif");
    setIconImage(icone);
     
    ********
     
    File f=new File("./aide/aide.htm");
    et voici donc l'arborescence que je dois lui fournir pour ça tourne correctement :


    Comment faire pour définir un chemin qui puisse être correct afin que les fichiers restent lus depuis le JAR ?

  2. #2
    Membre actif Avatar de Lethal
    Profil pro
    Développeur Java
    Inscrit en
    Février 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Février 2006
    Messages : 194
    Points : 227
    Points
    227
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    this.setIconImage((new ImageIcon(getClass().getResource("/aide/ressources/Icone.PNG"))).getImage());

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    340
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 340
    Points : 139
    Points
    139
    Par défaut
    ok, super, ça marche pour l'icône. mais pour l'aide, pourquoi ne trouve t il pas le fichier d'aide?
    File f=new File("./aide/aide.htm");
    Quand je clique sur afficher l'aide, j'ai un message d'erreur :
    the given file doesn't exist

    par contre, si je mets au même niveau que le jar le dossier aide avec entre autres dedans le fichier aide.htm, alors là, il trouve l'aide et l'ouvre.
    Comment lui dire de lire l'aide depuis le jar ?

  4. #4
    Membre expert
    Avatar de Janitrix
    Inscrit en
    Octobre 2005
    Messages
    3 391
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 3 391
    Points : 3 401
    Points
    3 401
    Par défaut
    C'est normal. Tu ne peux pas utiliser File pour un fichier dans un Jar. Les fichiers qui sont dans le Jar ne sont plus des fichiers au sens tu terme, juste des données. Le seul fichier, c'est le jar lui meme. Tu dois donc utiliser les streams de lecture pour accéder au contenu de chaque fichier.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    340
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 340
    Points : 139
    Points
    139
    Par défaut
    donc, si j'ai bien compris, je dois utiliser un FileInputStream("./aide/aide.htm");
    mais ensute, comment récupérer un File?
    pcq ce File me servait à faire
    Desktop.open(new File(...));

  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,

    Citation Envoyé par michaeljeru
    donc, si j'ai bien compris, je dois utiliser un FileInputStream("./aide/aide.htm");
    Non ! Ce n'est pas un fichier !
    Tu ne peux donc pas l'utiliser comme cela là ou un nom de fichier est attendu. Les systèmes de fichiers ne gèrent pas nativement les fichiers contenus dans une archive (au mieux il te permettent de la décompresser à la volée).

    Donc si tu veux lire le fichier il faut utiliser getResourceAsStream() qui te renvoi directement un InputStream...


    Citation Envoyé par michaeljeru
    mais ensute, comment récupérer un File?
    pcq ce File me servait à faire
    Desktop.open(new File(...));
    Il faut simplement décompresser dans un fichier temporaire afin de pouvoir l'ouvrir :
    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
    	public File copyToTempFile(String resourceName) throws IOException {
    		// Création d'un fichier temporaire
    		File file = File.createTempFile("tmp_", resourceName);
    		file.deleteOnExit();
     
    		// Copie vers le fichier temporaire :
    		InputStream in = getClass().getResourceAsStream(resourceName);
    		try {
    			OutputStream out = new FileOutputStream(file);
    			try {
    				byte[] buf = new byte[8196];
    				int len;
    				while ( (len=in.read(buf)) > 0) {
    					out.write(buf, 0, len);
    				}
    			} finally {
    				out.close();
    			}
    		} finally {
    			in.close();
    		}
     
    		return file;
    	}

    a++

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    340
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 340
    Points : 139
    Points
    139
    Par défaut
    ok, je vais tester ça, mais simple question, le fichier que je veux manipuler est un fichier html avec des images. cela ne va t il pas être trop long de re-créer ce fichier ainsi?

  8. #8
    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 michaeljeru
    ok, je vais tester ça, mais simple question, le fichier que je veux manipuler est un fichier html avec des images. cela ne va t il pas être trop long de re-créer ce fichier ainsi?
    Je ne pense pas que ce soit long... mais par contre cela risque d'être plus compliqué car il va alors falloir extraire toutes les images...

    a++

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/05/2013, 21h27
  2. Réponses: 7
    Dernier message: 02/09/2006, 17h49
  3. [JAR]Modification de fichier dans un jar
    Par vberetti dans le forum Général Java
    Réponses: 14
    Dernier message: 13/06/2005, 17h56
  4. [JAR] lire un fichier dans un jar OU hors d'un jar
    Par yveslamand dans le forum Général Java
    Réponses: 13
    Dernier message: 25/04/2005, 14h38
  5. [JAR] Accéder à un fichier dans un jar
    Par Nanoua dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 06/07/2004, 13h00

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