CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Problème de PATH après export en .jar

cybevil
cybevil
Niveau 27
08 mars 2021 à 01:42:58

Bonjour, je développe un petit jeu dans le cadre de mes cours, seulement après l'exportation de mon programme en .jar, je n'arrive plus à lire mes fichiers json.

J'imagine que le problème viens de la façon dont je les lis, je pointe vers un chemin qui n'existe plus une fois exporté.

mais pas moyen de corrigé cela après plusieurs heure de recherche.

public static Deck loadDeckClear(String nom) {
        BufferedReader bufferedReader = null;
        try {
            bufferedReader = new BufferedReader(new FileReader(nom));
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
         
        return new Gson().fromJson(bufferedReader,Deck.class);
    }

Je passe ceci à mon paramètre nom : "deck.JSON"

Mon fichier deck.JSON est situé ici dans mon arborescence :

https://image.noelshack.com/fichiers/2021/10/1/1615164157-98b7ba26-2085-4fc9-95cb-6aa8cb798055.png

Merci d'avance pour votre aide.

cybevil
cybevil
Niveau 27
08 mars 2021 à 09:29:03

J'ai oublié de préciser mais c'est du Java bien sûr.

Bunyan
Bunyan
Niveau 17
08 mars 2021 à 13:11:49

Normal, et tu as bien identifié la cause ^^

Quand tu lances l'app depuis ton IDE, le contexte des fichiers est au sein de ton projet, et sur ton filesystem, tu n'auras donc pas de souci pour lire tes fichiers.
Quand tu lances ton app via un JAR, le contexte des fichiers est toujours le filesystem. Cela pose comme différence que :
- tout le monde n'a pas l'arborescence de fichiers menant à tes fichiers sur leur filesystem
- tout le monde n'a pas tes fichiers sur leur filesystem (avec les bons droits)
- tes fichiers ont sans doute été packagés au sein du JAR

Ainsi, ce qu'il te faut n'est pas "lire un fichier sur un filesystem", mais "lire une ressource packagée dans le JAR".
Cela, tu peux le faire via getClass().getResourceAsFile(CHEMIN_RELATIF_PAR_RAPPORT_A_LA_RACINE_DU_JAR); :)

cybevil
cybevil
Niveau 27
08 mars 2021 à 14:31:35

Merci pour ta réponse, j'étais effectivement tomber sur ceci en cherchant un peu, seulement etant donné que ma méthode est static, je ne peut pas appelé directement getClass() il me semble. Une idée pour palier à ça ?

public static Deck loadDeckClear(String nom) {
		BufferedReader bufferedReader = null;
		try {
			bufferedReader = new BufferedReader(new FileReader(getClass().getResourceAsFile(nom)));
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		return new Gson().fromJson(bufferedReader,Deck.class);
	}
Message édité le 08 mars 2021 à 14:31:52 par cybevil
Bunyan
Bunyan
Niveau 17
08 mars 2021 à 19:52:22

Ouaip : ne pas rendre la méthode static :3
Sinon, lui passer un objet de type class , ou faire juste un truc àlakon genre ClasseEnglobanteDeTaMethodeStatic.class.getClassLoader()...

Je t'avoue que je n'ai pas d'IDE sous la main, et que ça fait longtemps que je n'ai pas fait de Java.

_lucco_
_lucco_
Niveau 10
10 mars 2021 à 00:45:37

Sinon si tu veux juste débuguer, pourquoi tu passes pas le chemin absolu ?

cybevil
cybevil
Niveau 27
10 mars 2021 à 00:59:58

Le 08 mars 2021 à 19:52:22 Bunyan a écrit :
Ouaip : ne pas rendre la méthode static :3
Sinon, lui passer un objet de type class , ou faire juste un truc àlakon genre ClasseEnglobanteDeTaMethodeStatic.class.getClassLoader()...

Je t'avoue que je n'ai pas d'IDE sous la main, et que ça fait longtemps que je n'ai pas fait de Java.

Je pourrais, mais ça m'obligerait à repenser le programme, j'aimerais bien réussir en la laissant static :3

J'ai essayé avec ta méthode, mais je ne vois pas bien comment l'intégrer pour ensuite pouvoir la passer à ma méthode fromJson. J'ai fait quelques tests, mais ça reste infructueux.

Le 10 mars 2021 à 00:45:37 _lucco_ a écrit :
Sinon si tu veux juste débuguer, pourquoi tu passes pas le chemin absolu ?

Par le chemin absolu ? Je ne comprends pas bien ce que tu me conseilles de faire.
J'arrive à accéder à mes fichiers json dans l'état actuel, se que je n'arrive pas à faire c'est d'y accéder depuis mon jar avec les json packager dans celui-ci.

_lucco_
_lucco_
Niveau 10
10 mars 2021 à 09:15:58

Le 10 mars 2021 à 00:59:58 cybevil a écrit :

Le 08 mars 2021 à 19:52:22 Bunyan a écrit :
Ouaip : ne pas rendre la méthode static :3
Sinon, lui passer un objet de type class , ou faire juste un truc àlakon genre ClasseEnglobanteDeTaMethodeStatic.class.getClassLoader()...

Je t'avoue que je n'ai pas d'IDE sous la main, et que ça fait longtemps que je n'ai pas fait de Java.

Je pourrais, mais ça m'obligerait à repenser le programme, j'aimerais bien réussir en la laissant static :3

J'ai essayé avec ta méthode, mais je ne vois pas bien comment l'intégrer pour ensuite pouvoir la passer à ma méthode fromJson. J'ai fait quelques tests, mais ça reste infructueux.

Le 10 mars 2021 à 00:45:37 _lucco_ a écrit :
Sinon si tu veux juste débuguer, pourquoi tu passes pas le chemin absolu ?

Par le chemin absolu ? Je ne comprends pas bien ce que tu me conseilles de faire.
J'arrive à accéder à mes fichiers json dans l'état actuel, se que je n'arrive pas à faire c'est d'y accéder depuis mon jar avec les json packager dans celui-ci.

Justement, si tu donne à ton programme le chemin absolu vers ton fichier JSON à lire, alors il pourra le lire peu importe le "lieu" d''execution de ton JAR

cybevil
cybevil
Niveau 27
10 mars 2021 à 09:44:51

D'accord, je veux bien essayer d'indiquer le chemin absolu, comment je peux connaître le chemin absolu de mes fichiers json sachant qu'ils sont réarrangés dans mon fichier jar ?

Message édité le 10 mars 2021 à 09:45:14 par cybevil
Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment