list

list - Java - Programmation

Marsh Posté le 31-05-2007 à 09:55:51    

yo les geek
ptite question :
j'ai le code ci dessous qui fait une liste de fichier et je prend l'avant dernier fichier de cette liste

Code :
  1. public String recherche(File rep){
  2. File[] liste = rep.listFiles();
  3. int tmp = liste.length-2;
  4. String filePath=""+liste[tmp];
  5. return filePath;
  6. }


je souhaiterai prendre l'avant dernier fichier MODOFIE de cette liste, y a t il une quelque chose pour ca .?
merci d'avance
un apprenti geek

Reply

Marsh Posté le 31-05-2007 à 09:55:51   

Reply

Marsh Posté le 31-05-2007 à 10:09:43    

tu peux faire un lastModified() sur les fichiers et comparer pour avoir l'avant dernier...
Voir les foutre dans une collection triée par lastModified aussi ...

Reply

Marsh Posté le 31-05-2007 à 10:24:28    

pour moi lasModified prend uniquement le dernier fichier modifier  
comment les classer avec ca pour pouvoir prendre l'avant dernier?

Reply

Marsh Posté le 31-05-2007 à 10:37:33    

http://java.sun.com/j2se/1.4.2/doc [...] Modified()
 
lastModified te retourne la date de dernière modification, pas le dernier fichier modifié.
 
Pour pouvoir les classer, je dirais de créer une classe qui extends File et overrider compareTo ? Actuellement compareTo compare les paths.
Ensuite si tu les mets dans une collection triée, ca devrait le faire, non ? p'tet je dis une grosse connerie aussi :D

Reply

Marsh Posté le 31-05-2007 à 11:30:08    

Implémente un Comparator et utilise le pour trier ta liste grace à Collection.sort

Reply

Marsh Posté le 31-05-2007 à 12:20:45    

voici ma ptite fonction qui marche , merci a tous vosu m'avez donné l'idée :

Code :
  1. public String recherche(File rep){
  2. String filePath="";
  3. File[] liste = rep.listFiles();
  4. long[] lastM = new long[liste.length];
  5. long[] lastM2 = new long[liste.length];
  6. for(int i=0;i<liste.length;i++)
  7. {
  8. lastM[i]=liste[i].lastModified();
  9. lastM2[i]=liste[i].lastModified();
  10. }
  11. int taille = lastM.length;
  12. int taille2 = taille;
  13. while(taille2>1)
  14. {
  15.  for(int i=0; i<taille-1; i++){
  16.   if(lastM[i]>lastM[i+1]){
  17.    long temp=lastM[i];
  18.    lastM[i]=lastM[i+1];
  19.    lastM[i+1]=temp;
  20.   }
  21.  }
  22.  taille2=taille2-1;
  23. }
  24. for(int i=0;i<taille;i++){
  25.  if(lastM[lastM.length-2]==lastM2[i])
  26.  {
  27.   filePath=""+liste[i];
  28.  }
  29. }
  30. return filePath;
  31. }

Reply

Marsh Posté le 31-05-2007 à 17:57:27    

Dommage que tu aies recodé un algorithme de tri. Arrays.sort() ou Collections.sort() le faisait déjà pour toi...

Reply

Marsh Posté le 02-06-2007 à 00:18:56    

La solution habituelle ressemble plus à cela, hormis le monstrueux cast en int sans précautions. En vrai, on ferait le test > 0, < 0 == 0 et ce serait marre, mais j'ai la flemme :

Code :
  1. public String recherche(File rep) {
  2.     File[] liste = rep.listFiles();
  3.     Collections.sort(liste, new Comparator() {
  4.         public int compare(Object o1, Object o2) {
  5.             File f1 = (File) o1;
  6.             File f2 = (File) o2;
  7.             return (int) f1.lastModified() - f2.lastModified(); // bon ça c'est pourri, mais ça donne l'idée
  8.         }
  9.     });
  10.     if (liste.length > 1) {
  11.         return liste[liste.length - 1].getPathname();
  12.     }
  13.     return null;
  14. }

Reply

Marsh Posté le 11-06-2007 à 10:13:18    

j'ai maintenant le soucis suivant
ma fonction marche mais je dois faire ce tris sur un repertoire qui est mis a jour par 2 voir 3 images chaque seconde (upload sur ftp).
je dois donc prendre l'avant derniere de ce repertoire mais les images uploadé par deux ou 3 ont la mm date mm heure mm seconde de modification et je n'ai pas l'impression que lastmodified travail sur les milliseconde. Je me retrouve donc avec des images tronqués car l'upload n'est pas encore terminé...
comment différencié ces images qui on la mm date de modif ??

Reply

Marsh Posté le 11-06-2007 à 12:07:13    

bon je vais comparer les noms de fichier dans ce cas.  
savez vous comment convertir un File en String?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed