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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2017
    Messages : 7
    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
    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 : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    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
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2017
    Messages : 7
    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
    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 : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    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
    Nouveau membre du Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2017
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2017
    Messages : 7
    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
    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 : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    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);
      		}

+ 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