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 :

[Fichier] Effacement de fichiers retournat nullPointerException


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    SAQ
    Inscrit en
    Novembre 2005
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Canada

    Informations professionnelles :
    Activité : SAQ
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2005
    Messages : 167
    Par défaut [Fichier] Effacement de fichiers retournat nullPointerException
    Bonjour à tous
    j'ai un bug emmerdant avec une fonction responsable d'affacer les fichier d'un répertoire. peux importe cce que je tente ça lance une NullPointerException.
    Voilà les observations que j'ai fait:

    1. l'appel de canRead() me retourn true
    2. l'appel de canWrite() me retourne true aussi
    3. et l'appel de isDirectory() retourne true également
    4. Fait important, le path est le bon


    voilà briève le code de cette fonction infernale qui me fait galèrer ( moi et mes collègues depuis une semaine :

    Code java : 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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    public static void deleteFolderContent(String pDirPath) 
        {  System.out.println(pDirPath);
            File lRep = new File(pDirPath);
            if (!lRep.exists())
                return;
     
            try
            {
                if(lRep.isDirectory()){
    			 int iNombreFichiers=0;
                // try/catch pour tests uniquement
                try{
    				iNombreFichiers=lRep.listFiles().length;
                }
                catch (NullPointerException e)
                {
                   System.out.println("Erreur de lenght"); 
                }
     
    			System.out.println("NB file:" +iNombreFichiers);
                //On allocate un Array correspondant au nombre de fichiers dans le DIR
                File[] lFiles = new File[iNombreFichiers]; 
                /*croyant que c'était à ce niveau,
                j'ai pensé créer un Array de taille correspondante au nombre de      fichiers */
     
                if (iNombreFichiers == 0)
                    return;
    			lFiles=lRep.listFiles();
                for (int i = 0; i < iNombreFichiers; i++)
                {           
                	System.out.println("Suis dans le for");
                    File fFichierCourant = lFiles[i];
                    if (fFichierCourant != null)
                        log.info("Effacement de :" +fFichierCourant.getName());
                        fFichierCourant.delete();
                }
               }
            }
            catch(NullPointerException nEx){
            	//selon l'API, listFiles() lance une NullPointerException si le répertoire est vide (or, dans mon cas, il n'est pas vide)
            	log.warn(" le dossier à efacer est vide "+ lRep);
            }
            catch (Exception e){
             //LOG - logging starts here 
            log.fatal("Exception dans : deleteFolderContent() de BanGenFileUtils"+e.getMessage());
            }
     
     
     
     
        }

    Quelqu'un a une idée du pourquoi de ce bug chiant ?

    Merci d'avance de votre aide

    Laurent

  2. #2
    Rédacteur
    Avatar de benwit
    Profil pro
    dev
    Inscrit en
    Septembre 2004
    Messages
    1 676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 676
    Par défaut
    J'ai essayé ton code chez moi (Windows XP) avec un dossier rempli de fichiers, un dossier rempli de fichiers et de dossiers, ... de fichiers en lecture seule, caché ou crypté ...

    Et tout est OK (Java 1.5)
    Les fichiers et les fichiers seuls sont effacés.

    As tu pensé à vérifier que les fichiers de ton dossier sont bien supprimables au niveau du système ?

    As tu utilisé un debugger pas à pas pour voir où l'erreur peut se produire, quitte à mettre les sources de java pour voir ce qui peut poser problème ?

    Sinon, je te proprose ma version de ton programme qui trace les étapes une à une en ayant pris au soin la précaution de tester tous les objets potentiellement null :

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
        public static void deleteFolderContent(String pDirPath) 
        { 
            try
            {
                // Pas de chemin, on sort
                if (pDirPath == null)
                    return;
     
                System.out.println("Le chemin est correct");
     
                // Pas de répertoire existant, on sort
                File lRep = new File(pDirPath);
                if (!lRep.exists() || !lRep.isDirectory())
                    return;
     
                System.out.println("Le répertoire est correct");
     
                // Pas de fichiers, on sort
                File[] files = lRep.listFiles();
                if (files == null || files.length == 0)
                    return;
     
                System.out.println("Il y a " + files.length + " fichiers");
     
                int f = 1;
                for (File file : files)
                {
                    // Si le fichier est indéfini, on le passe
                    if (file == null)
                    {
                        continue;
                    }
                    else
                    {
                        System.out.println("Fichier " + f++ + " : "+ file.getName());
                        if (file.delete())
                            System.out.println("Fichier supprimé" );
                        else
                            System.out.println("Fichier non supprimé" );
                    }
                }
            }
            catch (Exception e)
            {
               System.err.println("Erreur : " + e); 
            }
        }
    Je sais que tu as probablement tout essayé mais pourrais tu essayé mon code et me fournir la trace ?

  3. #3
    Membre très actif
    Homme Profil pro
    SAQ
    Inscrit en
    Novembre 2005
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Canada

    Informations professionnelles :
    Activité : SAQ
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2005
    Messages : 167
    Par défaut
    nah, ça marche pas

    de plus, lorsque j'ai écrit ce code tout bête :

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    File[] listeFichiers=new File(getServlet().getServletContext().getRealPath("/BannieresGenerees")).listFiles();
                     for (int i = 0; i < listeFichiers.length; i++)
                    {   System.out.println("DELETATION....");
                        listeFichiers[i].delete();
                    }
                    System.out.println("DELETATION Finished...");

    dans mon action struts ça marche
    Or, j'ai inséré ce même code dans lonctrion deleleteFoldeContent() et ça ne marche pas...........

    Notez que le path est bon dans tout les cas, j'ai fait les vérifications d'usage...

    je vais sûrerment être obligé de faire ça malproprement en mettant le code d'effacement dans mon action.......... je n'aime pas trop ça

    Enfin, pour moi ceci reste un mystère total

  4. #4
    Membre très actif
    Homme Profil pro
    SAQ
    Inscrit en
    Novembre 2005
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Canada

    Informations professionnelles :
    Activité : SAQ
    Secteur : Service public

    Informations forums :
    Inscription : Novembre 2005
    Messages : 167
    Par défaut
    le String passé en param contenait une espace à la fin !!!! Salo***rie

    Morale, faire un trim() automatique sur les String!

    N'importe quoi

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

Discussions similaires

  1. Réponses: 15
    Dernier message: 28/11/2008, 17h57
  2. Effacer un fichier
    Par Mr Hyde dans le forum Général Python
    Réponses: 6
    Dernier message: 19/11/2007, 22h49
  3. Fichier effacés sous linux ....
    Par vbcasimir dans le forum Administration système
    Réponses: 4
    Dernier message: 09/12/2004, 09h28
  4. recupere un fichier effacer
    Par Mr_Chut dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 27/04/2004, 19h40
  5. [API WIN 32]effacer un fichier
    Par ben_iap dans le forum MFC
    Réponses: 2
    Dernier message: 30/01/2004, 13h51

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