2008-11-13 21 views

Respuesta

0

Algo así como:

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

Es una especie de poco firme para forzar un ClassCastException en el caso de no presentar en lugar de, por ejemplo, la afirmación de instanceof. –

+1

No obtendrá un archivo que no sea un archivo de la matriz devuelta por File.listFiles(); – OscarRyz

+0

Derecha. Entonces afirma eso. –

48

Esto devuelve la última modificación:

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

Recuerde comprobar que listFiles() no devuelve null. –

15

Esto funciona perfectamente bien para mí:

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

vamos, no es necesario ordenar array para obtener el valor mínimo! – andrej

+0

Tal vez perfecto, pero no rápido – mes

+0

¿Qué pasa si no estamos actualizando el directorio dará siempre el mismo resultado? – 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

Por favor, no solo descargue su código. Explique su línea de pensamiento para que podamos entender mejor su respuesta. Gracias. – Cthulhu

+1

agregó más comentarios en el código :) – Almaz

+1

¿Qué sucede si la diferencia entre las dos marcas de tiempo modificadas por última vez es mayor que 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

tipos, puede usar este código para obtener el último archivo modificado. –

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; 
} 
Cuestiones relacionadas