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 :
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 :
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" :
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.
Partager