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

Langage Java Discussion :

Problème copie d'un fichier à la racine du projet


Sujet :

Langage Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2017
    Messages : 7
    Points : 2
    Points
    2
    Par défaut Problème copie d'un fichier à la racine du projet
    Bonjour/Bonsoir, aujourd'hui je me retrouve confronté à ce problème mafoi très dérangeant. Lorsque je load ce fichier dans mon jar avec cette méthode :

    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
    	private void setDefaultContent(String fileName) throws IOException
    	{
    		file = new File(path, fileName);
    		if (file.exists())
    		{
    			config = YamlConfiguration.loadConfiguration(file);
    			return;
    		}
    		else
    			file.getParentFile().mkdirs();
    		BufferedReader in = new BufferedReader(new InputStreamReader(main.getResource(fileName)));
    		BufferedWriter out = new BufferedWriter(new FileWriter(file));
    		char[] buffer = new char[1024];
    		int size;
    		while ((size = in.read(buffer, 0, buffer.length)) != -1)
    			out.write(buffer, 0, size);
    		in.close();
    		out.close();
    		config = YamlConfiguration.loadConfiguration(file);
    	}
    A la sortie, quand j'ouvre le fichier aucun commentaire est présent, et le load a eu quelques problèmes (de gros problèmes)

    Screen dans mon eclipse :
    http://prntscr.com/ephrd3

    Screen à la sortie dans l'éditeur de texte:
    http://prntscr.com/ephrk3

  2. #2
    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
    que valent les valeur de path et filename?
    il y a quoi dans ta méthode getResource?
    Tu t'es bien assuré que le fichier n'existait pas avant de faire ton test? Sinon il n'y a aucune copie.
    Quel est le code de YamlConfiguration.loadConfiguration(file);? Ca foire aussi si tu fait seulement la copie et rien d'autre avec le fichier après?

    Peux tu poster ta ressource et le fichier généré en attachement, plutôt que des screenshot? Ce n'est pas parlant les screenshots.
    Tes reader / writer devraient être initialisés avec un encodage explicite plutot que de prendre le "platform default".

  3. #3
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2017
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    path et fileName ne sont pas null.

    La méthode getResource vient de l'api Bukkit. Voici la classe où se trouve la méthode getResource : https://github.com/Bukkit/Bukkit/blo...avaPlugin.java

    Oui, le fichier n'existe pas.

    Classe ou se trouve la méthode loadConfiguration :
    https://github.com/Bukkit/Bukkit/blo...iguration.java

    Les fichiers sont invalides, dit moi ce que tu veux voir et je te le montre.

    "Tes reader / writer devraient être initialisés avec un encodage explicite plutot que de prendre le "platform default"." Ce qui veut dire ?

    Merci de la réponse

  4. #4
    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
    Citation Envoyé par Jestiz Voir le message

    Les fichiers sont invalides, dit moi ce que tu veux voir et je te le montre.
    Ben les fichiers avant et après, en attachment qu'on aie le binaire exact tel que dans ton pc. Sans que rien d'autre n'ai touché ces fichiers (pas de chipos avec load confguration ou autre pièce de code qui les bidouillerais, historie d'être sur que c'est ta copie la coupable). Je ne te cache pas que je suis dubitatif. Ton code n'as aucun raison de virer les commentaires. C'est bien trop haut niveau.

    Aussi, les urls complète de ta ressource (System.out.println(getClassLoader().getResource(filename)) et du fichier où tu écrit (file.getAbsolutePath()) seraient utiles pour s'assurer que tu n'es pas occupé d'écrire là où tu lit.


    Citation Envoyé par Jestiz Voir le message
    "Tes reader / writer devraient être initialisés avec un encodage explicite plutot que de prendre le "platform default"." Ce qui veut dire ?
    Que pour tes reader tu dois utiliser les constructeurs précisant l'encodage du fichier. Sinon c'est la roulette russe à la lecture / écriture.

  5. #5
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2017
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Le site n'accepte pas les fichiers yml, l'indentation d'un est ratée.

    Fichier avant que la méthode ne soit utilisée.
    lang_fr.txt

    Fichier une fois la méthode utilisée.
    lang_fr.txt

    Voici ce que me dit la console :

    [13:34:54 INFO]: C:\Users\Jules\Desktop\Serveur Local\plugins\JHCFCore\lang\lang_fr.yml
    [13:34:54 INFO]: jar:file:/C:/Users/Jules/Desktop/Serveur%20Local/plugins/JHcfCore.jar!/lang_fr.yml

  6. #6
    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
    Bon, au moins c'est bien deux fichiers séparés.
    Bien que le fait d'avoir utilisé l'encodage par défaut pour te reader peux expliquer la perte des accents, le code présenté ne peux pas justifier le bordel dans le fichier à l'arrivée.

    Plusieurs choses à investiguer:
    • Vu que c'est une structure dans un plugin pour quelque chose, vérifie que ce quelque chose ne lance pas plusieurs fois ta méthode en parallèle. Ça expliquerait la soupe dans le fichier. Un Log au début et à la fin de la méthode permettrait d'en avoir le coeur net.
    • Essayer de porter ce code dans un main à part et le lancer sans la partie YamlConfiguration, ou mettre un System.exti(0) juste après la copie, pour voir si le fichier est toujours aussi pourri.
    • Aussi, vu que tout ce que tu essaie de faire c'est copier un fichier, il n'y a pas besoin de reader, ton code de copie peut être remplacé par
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      		try (
      			InputStream is = main.getResource(fileName);
      			OutputStream out = new FileOutputStream(file)
      		) {
      			byte[] buffer = new byte[1024];
      			int size;
      			while ((size = in.read(buffer, 0, buffer.length)) != -1)
      				out.write(buffer, 0, size);
      		}

  7. #7
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2017
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    1ère hypotèse

    L'erreur vient du YamlConfiguration.loadConfiguration(File file);
    Mais si je l'enlève, aucune donnée n'est affichée dans la fichier, il est comme vide.

    2ème hypotèse :

    L'erreur vient lors de la réécriture, lorsque le fichier est lu, je debug en écrivant
    dans la console ce que contient le buffer. Et tout est bien (sauf les accents) car le cmd ne les tolère pas.

    Je ne sais donc pas quoi faire :/

  8. #8
    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
    Citation Envoyé par Jestiz Voir le message
    1ère hypotèse

    L'erreur vient du YamlConfiguration.loadConfiguration(File file);
    Mais si je l'enlève, aucune donnée n'est affichée dans la fichier, il est comme vide.
    Pas normal,
    1)puisque tu viens d'écrire dans ce fichier.
    2) ca veux dire qu'il écrit dans ce fichier donc ton code n'a rien à voir avec le problème.

  9. #9
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2017
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Ah oui, j'ai oublié de préciser, avec ton code si je ne mets pas le loadConfiguration, ça ne s'affiche toujours pas, il n'y a pas un moyen de rafraichir le fichier ?

  10. #10
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2017
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Cette méthode :


    Avec le git ici : https://github.com/Bukkit/Bukkit/blo...avaPlugin.java

    Fonctionne parfaitement, mais ne me permet pas de choisir un path. Tu saurais pourquoi celle-ci fonctionnerait et pas l'autre ?

  11. #11
    Candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2017
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    La méthode loadConfiguration(); créait le problème.

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

Discussions similaires

  1. Problème de création de fichier à la racine d'une application
    Par moujik_1980 dans le forum Développement Web en Java
    Réponses: 2
    Dernier message: 28/12/2014, 18h44
  2. probléme copie fichier de sauvegarde
    Par ess2007 dans le forum Windows Serveur
    Réponses: 7
    Dernier message: 21/07/2008, 16h52
  3. Problème de copie d'un fichier
    Par fanouk dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 27/06/2008, 15h39
  4. Problème copie de fichiers
    Par trollichinelle dans le forum Langage
    Réponses: 2
    Dernier message: 26/06/2008, 12h44
  5. [Probléme] Script copie dans un fichier
    Par maloute80 dans le forum Langage
    Réponses: 23
    Dernier message: 29/11/2007, 15h52

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