2008-11-13 11 views

Répondre

0

Quelque chose comme:

import java.io.File; 
import java.util.Arrays; 
import java.util.Comparator; 


public class Newest { 
    public static void main(String[] args) { 
     File dir = new File("C:\\your\\dir"); 
     File [] files = dir.listFiles(); 
     Arrays.sort(files, new Comparator(){ 
      public int compare(Object o1, Object o2) { 
       return compare((File)o1, (File)o2); 
      } 
      private int compare(File f1, File f2){ 
       long result = f2.lastModified() - f1.lastModified(); 
       if(result > 0){ 
        return 1; 
       } else if(result < 0){ 
        return -1; 
       } else { 
        return 0; 
       } 
      } 
     }); 
     System.out.println(Arrays.asList(files)); 
    } 
} 
+0

Il est un peu bancal pour forcer un ClassCastException dans le cas non-fichier, au lieu de, disons, affirmant instanceof. –

+1

Vous ne recevrez pas de non-fichier de la matrice retournée par File.listFiles(); – OscarRyz

+0

Droite. Alors affirmez cela. –

48

Cela renvoie la dernière modification:

public static File lastFileModified(String dir) { 
    File fl = new File(dir); 
    File[] files = fl.listFiles(new FileFilter() {   
     public boolean accept(File file) { 
      return file.isFile(); 
     } 
    }); 
    long lastMod = Long.MIN_VALUE; 
    File choice = null; 
    for (File file : files) { 
     if (file.lastModified() > lastMod) { 
      choice = file; 
      lastMod = file.lastModified(); 
     } 
    } 
    return choice; 
} 
+4

N'oubliez pas de vérifier que listFiles() ne renvoie pas de valeur nulle. –

15

Cela fonctionne parfaitement bien pour moi:

import org.apache.commons.io.FileUtils; 
import org.apache.commons.io.comparator.LastModifiedFileComparator; 
import org.apache.commons.io.filefilter.WildcardFileFilter; 

... 

/* Get the newest file for a specific extension */ 
public File getTheNewestFile(String filePath, String ext) { 
    File theNewestFile = null; 
    File dir = new File(filePath); 
    FileFilter fileFilter = new WildcardFileFilter("*." + ext); 
    File[] files = dir.listFiles(fileFilter); 

    if (files.length > 0) { 
     /** The newest file comes first **/ 
     Arrays.sort(files, LastModifiedFileComparator.LASTMODIFIED_REVERSE); 
     theNewestFile = files[0]; 
    } 

    return theNewestFile; 
} 
+10

Allez, vous n'avez pas à SORT tableau pour obtenir la valeur minimale! – andrej

+0

Peut-être parfait, mais pas rapide – mes

+0

Que faire si nous ne mettons pas à jour le répertoire, il donnera le même résultat à chaque fois. – Dileep

16

En Java 8:

Path dir = Paths.get("./path/somewhere"); // specify your directory 

Optional<Path> lastFilePath = Files.list(dir) // here we get the stream with full directory listing 
    .filter(f -> !Files.isDirectory(f)) // exclude subdirectories from listing 
    .max(Comparator.comparingLong(f -> f.toFile().lastModified())); // finally get the last file using simple comparator by lastModified field 

if (lastFilePath.isPresent()) // your folder may be empty 
{ 
    // do your code here, lastFilePath contains all you need 
}  
+0

Veuillez ne pas simplement vider votre code. Expliquez votre train de pensée afin que nous puissions mieux comprendre votre réponse. Merci. – Cthulhu

+1

a ajouté plus de commentaires dans le code :) – Almaz

+1

Que se passe-t-il si la différence entre les deux horodatages modifiés en dernier est supérieure à Integer.MAX_VALUE? –

0
private File getLatestFilefromDir(String dirPath){ 
    File dir = new File(dirPath); 
    File[] files = dir.listFiles(); 
    if (files == null || files.length == 0) { 
     return null; 
    } 

    File lastModifiedFile = files[0]; 
    for (int i = 1; i < files.length; i++) { 
     if (lastModifiedFile.lastModified() < files[i].lastModified()) { 
      lastModifiedFile = files[i]; 
     } 
    } 
    return lastModifiedFile; 
} 
+0

les gars, vous pouvez utiliser ce code pour obtenir le dernier fichier modifié. –

1
public File getLastDownloadedFile() { 
    File choice = null; 
    try { 
     File fl = new File("C:/Users/" + System.getProperty("user.name") 
       + "/Downloads/"); 
     File[] files = fl.listFiles(new FileFilter() { 
      public boolean accept(File file) { 
       return file.isFile(); 
      } 
     }); 
     Thread.sleep(60000); 
     long lastMod = Long.MIN_VALUE; 

     for (File file : files) { 
      if (file.lastModified() > lastMod) { 
       choice = file; 
       lastMod = file.lastModified(); 
      } 
     } 
    } catch (Exception e) { 
     Reporter.log("Exception while getting the last download file :" 
       + e.getMessage()); 
    } 
    log.info("The last downloaded file is " + choice.getPath()); 
    Reporter.log("The last downloaded file is " + choice.getPath(),true); 
    return choice; 
} 
Questions connexes