Bonjour à tous, j'ai créé un petit programme pour me permettre de classer mes différents fichiers multimédia sur une autre partition, mon programme marche bien sauf pour ma partition système et précisément le dossier "Users" ayant pour Symolic Link "Documents and Settings".

En effet mon programme scanne les différents lecteur de mon pc (clé usb, partitions,etc...) et récupère des fichiers d'un type prédéfini.

Lorsqu'il lit les partitions tout se passe bien jusqu'à arrivé à ma partition système et le dossier "Users", j'obtiens l'erreur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
java.lang.NullPointerException
En effet lorsque j'essaie d'atteindre le dossier par l'explorateur j'ai un message d'accès refusé (et je suis admin de la machine).

Après moult recherches j'ai découvert que le problème venait du fait que ce dossier est un Symbolic link de Users, et je n'ai pas réellement trouvé de solution.

Voici mon code de la méthode qui parcoure les lecteurs :
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
49
50
51
52
public static void itererRepertoire(String repertoire, int j) {
 
        String winVers = System.getProperty("os.version");
        ArrayList<File> fic = new ArrayList<File>();
 	ArrayList<String> end = new ArrayList<String>();
	end.add(".jpg");
	end.add(".avi");
	end.add(".mp4");
        File dir = new File(repertoire);
 
 
            // si le repertoire courant est bien un repertoire 
 
 
            if(dir.isDirectory()){
                   String s[] = dir.list();
 
 
                   fic.add(dir);
 
                   for (int i=0; i<s.length; i++){
 
                       if(s[i].equals("Documents and Settings") && winVers.equals("6.0") || winVers.equals("6.1"))
                       {
                           s[i]= "Users";
                       }
 
                    File dirTemp = new File(repertoire + s[i] + "\\" );
 
                    // si le terme de la liste est lui-même un répertoire                
 
 
                    if(dirTemp.isDirectory() && j > 0){
                        itererRepertoire(repertoire + s[i] + "\\", j-1);
                    }
 
 
                    // si le terme de la liste est un fichier 
             	for(int j = 0; j< end.size();j++){
 
                    if(!dirTemp.isDirectory() && s[i].endsWith(end.get(j))){
 
 
                        //u.display("DIRTEMP :"+dirTemp.getAbsolutePath());
                        File out = new File(System.getProperty("user.dir")+File.separator+"recup"+i+end.get(j));
                        copy(dirTemp,out);
 
                    }
                   } 
                }
            }      
}
J'ai tenté de contourner le problème avec cette restriction juste après mon "for" :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
if(s[i].equals("Documents and Settings") && winVers.equals("6.0") || winVers.equals("6.1"))
                       {
                           s[i]= "Users";
                       }
(Je précise je que teste la version de windows si = à 7 ou vista car sur xp le problème ne devrait pas se poser.)

Cette restriction fonctionne mais au lieu de continuer à parcourir le disque mon programme scanne en boucle mon dossiers Users, puis s'arrête.

Avez-vous déjà rencontré ce problème, ou peut être voyez vous le problème dans mon code ?

Merci d'avance pour votre aide.