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 :
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).Code:java.lang.NullPointerException
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 :
J'ai tenté de contourner le problème avec cette restriction juste après mon "for" :Code:
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); } } } } }
(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.)Code:
1
2
3
4 if(s[i].equals("Documents and Settings") && winVers.equals("6.0") || winVers.equals("6.1")) { s[i]= "Users"; }
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.