Est-ce que quelqu'un a un extrait de Java qui peut retourner le fichier le plus récent dans un répertoire (ou la connaissance d'une bibliothèque qui simplifie ce genre de chose)?Java - obtient le fichier le plus récent dans un répertoire?
Répondre
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));
}
}
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;
}
N'oubliez pas de vérifier que listFiles() ne renvoie pas de valeur nulle. –
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;
}
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
}
Veuillez ne pas simplement vider votre code. Expliquez votre train de pensée afin que nous puissions mieux comprendre votre réponse. Merci. – Cthulhu
a ajouté plus de commentaires dans le code :) – Almaz
Que se passe-t-il si la différence entre les deux horodatages modifiés en dernier est supérieure à Integer.MAX_VALUE? –
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;
}
les gars, vous pouvez utiliser ce code pour obtenir le dernier fichier modifié. –
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;
}
Il est un peu bancal pour forcer un ClassCastException dans le cas non-fichier, au lieu de, disons, affirmant instanceof. –
Vous ne recevrez pas de non-fichier de la matrice retournée par File.listFiles(); – OscarRyz
Droite. Alors affirmez cela. –