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

Spring Java Discussion :

Un bug dans FileSystemUtils.copyRecursively ?


Sujet :

Spring Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut Un bug dans FileSystemUtils.copyRecursively ?
    Hello,

    Je ne suis pas vraiment un familier des issues/tracking, mais il me semble qu'il existe un bug dans une fonction - parfaitement secondaire - de Spring, dans FileSystemUtils, au niveau de la méthode copyRecursively, grâce à laquelle on peut copier un répertoire vers un autre.

    Elle est très simple : pour chaque élément du répertoire source, si c'est un fichier, elle le copie vers la destination, sinon elle s'appelle récursivement en considérant que c'est un répertoire.

    Mais une "chose" sur un système de fichier peut parfaitement n'être ni un fichier, ni un répertoire ; auquel cas, l'appel récursif va planter : la liste du faux répertoire va renvoyer null, et on aura un NullPointerException à la ligne 60.

    Je ne sais pas si je suis clair...

    Le problème m'est arrivé, sur un fichier que je trimballe de sauvegarde en sauvegarde, de système d'exploitation en système d'exploitation, d'encodage en encodage, et qui n'est plus rien aujourd'hui, le pauvre, sauf pour faire des NullPointerException.

    Qu'en pensez-vous ?... J'ai cherché un peu dans le jira de spring mais j'ai rien trouvé qui ressemble à ça...

    La solution, que j'ai appliquée, est de transformer ainsi la 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
    21
      public static void copyRecursively(File src, File dest) throws IOException
      {
        dest.mkdir();
        File[] entries = src.listFiles();
        for (int i = 0; i < entries.length; i++)
        {
          File file = entries[i];
          File newFile = new File(dest, file.getName());
          if (file.isFile())
          {
            newFile.createNewFile();
            FileCopyUtils.copy(file, newFile);
          }
          else if (file.isDirectory())
            {
              copyRecursively(file, newFile);
            }
            else
              System.out.println("file '" + file + "' ni un fichier, ni un répertoire."); // nothing
        }
      }

  2. #2
    Rédacteur
    Avatar de Hikage
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 177
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 177
    Par défaut
    Je présume que tu es sous linux pour avoir des 'choses' qui ne sont ni fichier ni répertoire ?

    Si tu as un exemple concret à proposer, il serait peut être intéressant de créer une issue sur le jira de Spring en expliquant la chose.
    Hikage
    SCJP / SCWCD & SCWSJD Certified / Spring Framework Certified
    [Personal Web] [CV]

    F.A.Q Spring Framework - Participez !

  3. #3
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Oui, je suis sous Linux. Mais mes connaissances sur Linux ne sont pas suffisantes pour expliquer le phénomène ; je peux juste dire que, au départ, les "choses" incriminées étaient des fichiers, et que, au fur et à mesure de manips non identifiées, c'est devenu n'importe quoi.

    Je subodorre qu'il s'agit d'un problème de décodage du nom de fichier. En effet le fichier incriminé comporte des accents, dans un autre encodage que l'encodage standard ; j'ai l'impression que la JVM - ou Linux ? - se trompe à cause de ça.

    Il n'en reste pas moins vrai que cela provoque le plantage de tout le processus de copie, sur un NullPointerException, alors que ça ne devrait pas, à mon avis ; il y a simplement une chose, dans le système de fichiers, qui n'est pas copiable, c'est tout.

    Que veux-tu dire par un exemple concret ?

  4. #4
    Rédacteur
    Avatar de Hikage
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 177
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 177
    Par défaut
    Citation Envoyé par gifffftane Voir le message

    Que veux-tu dire par un exemple concret ?

    J'entends un répertoire qui "foire" pour lequel tu ferai un listing via la console Linux. afin d'avoir la structure et le "type" de fichier en dehors du monde java.

    Avec un code java simple, qui "bug" et pour lequel tu aurais une sortie.

    Tout ca pour fournir une piste de départ pour les gens de Spring :-)
    Hikage
    SCJP / SCWCD & SCWSJD Certified / Spring Framework Certified
    [Personal Web] [CV]

    F.A.Q Spring Framework - Participez !

  5. #5
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Je ne suis pas sûr que je puisse transmettre aux gens de spring le fichier incriminé puisque... précisément, je ne peux pas le copier !

    Le listing, voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    > ls -l *dynamique.html                        [9:02:01]
    -rw-r--r-- 1 herve herve 2615 2008-07-02 22:18 94-Etre-dynamique.html
    -rw-r--r-- 1 herve herve 2610 2008-06-26 17:50 94-Être-dynamique.html
    -rw-r--r-- 1 herve herve 2581 2008-04-22 15:51 94-+�tre-dynamique.html
    Le fichier qui plante est le dernier. ... Même pour la simple copie de son nom cela foire, c'est dire... depuis ma console je vois "94-+(petit rectangle)tre-dy...".

    Le code c'est copyRecursively, ils l'ont déjà, j'imagine...

    Et pour la solution, c'est dans mon premier post ! Ça c'est du précis !

  6. #6
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    Salut,
    Citation Envoyé par gifffftane Voir le message
    Et pour la solution, c'est dans mon premier post ! Ça c'est du précis !
    Tu pourrais alors ouvrir une issue dans le JIRA de Spring décrivant ce phénomène + le code corrigé (ou mieux encore, un patch), histoire d'être un citoyen modèle dans le pays de l'Open Source

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

Discussions similaires

  1. Bug dans le TCheckListBox ?
    Par Tardiff Jean-François dans le forum Composants VCL
    Réponses: 6
    Dernier message: 04/11/2004, 08h39
  2. Bug dans les expressions régulières ?
    Par SergioF dans le forum Linux
    Réponses: 8
    Dernier message: 12/05/2004, 15h14
  3. [PROPERTIES] Bug dans java.util.Properties ?
    Par mathieu dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 28/04/2004, 15h11
  4. bug dans une base Access
    Par bizouard dans le forum Access
    Réponses: 5
    Dernier message: 29/12/2003, 12h41

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