Finn den sist endrede filen i en katalog med Java

1. Oversikt

I denne raske opplæringen skal vi se nærmere på hvordan du finner den sist endrede filen i en bestemt katalog i Java.

Først begynner vi med den eldre IO og de moderne NIO API-ene. Så får vi se hvordan du bruker Apache Commons IO-biblioteket for å oppnå det samme.

2. Bruke java.io API

Arven java.io pakken gir Fil klasse for å kapsle inn en abstrakt representasjon av fil- og katalogbanenavn.

Heldigvis, den Fil klasse kommer med en praktisk metode som kalles sist endret(). Denne metoden returnerer den sist endrede tiden for filen angitt med et abstrakt stinavn.

La oss nå se på hvordan vi kan bruke java.io. fil klasse for å oppnå det tiltenkte formålet:

public static File findUsingIOApi (String sdir) {File dir = new File (sdir); if (dir.isDirectory ()) {Valgfri opFile = Arrays.stream (dir.listFiles (File :: isFile)) .max ((f1, f2) -> Long.compare (f1.lastModified (), f2.lastModified ( ))); hvis (opFile.isPresent ()) {return opFile.get (); }} returner null; }

Som vi ser, bruker vi Java 8 Stream API til å løpe gjennom en rekke filer. Deretter påkaller vi maks () operasjon for å få filen med de siste endringene.

Legg merke til at vi bruker en Valgfri forekomst for å kapsle inn den sist endrede filen.

Husk at denne tilnærmingen regnes som gammeldags og utdatert. Vi kan imidlertid bruke den hvis vi vil være kompatible med Java-arven IO-verden.

3. Bruke de java.nio API

Innføringen av NIO API er et vendepunkt for filsystemadministrasjon. Den nye versjonen NIO.2 som leveres i Java 7 kommer med et sett med forbedrede funksjoner for bedre filadministrasjon og manipulering.

Faktisk, den java.nio.file.Files klasse gir stor fleksibilitet når det gjelder manipulering av filer og kataloger i Java.

Så, la oss se hvordan vi kan bruke Filer klasse for å få den sist endrede filen i en katalog:

offentlig statisk Path findUsingNIOApi (String sdir) kaster IOException {Path dir = Paths.get (sdir); hvis (Files.isDirectory (dir)) {Valgfri opPath = Files.list (dir) .filter (p ->! Files.isDirectory (p)). sortert ((p1, p2) -> Long.valueOf (p2.toFile () .lastModified ()) .compareTo (p1.toFile (). lastModified ())) .findFirst (); hvis (opPath.isPresent ()) {return opPath.get (); }} returner null; }

På samme måte som det første eksemplet stoler vi på Steam API for å få bare filer. Deretter sorterer vi filene våre basert på sist modifiserte tid ved hjelp av et lambdauttrykk.

4. Bruke Apache Commons IO

Apache Commons IO har tatt filsystemstyring til neste nivå. Det gir et sett med praktiske klasser, filkomparatorer, filfiltre og mye mer.

Heldigvis for oss tilbyr biblioteketLastModifiedFileComparator klasse som kan brukes som enkomparator for å sortere en rekke filer etter siste modifiserte tid.

For det første må vi legge til commons-io avhengighet i vår pom.xml:

 commons-io commons-io 2.7 

Til slutt, la oss vise hvordan du finner den sist endrede filen i en mappe ved hjelp av Apache Commons IO:

public static File findUsingCommonsIO (String sdir) {File dir = new File (sdir); hvis (dir.isDirectory ()) {File [] dirFiles = dir.listFiles ((FileFilter) FileFilterUtils.fileFileFilter ()); hvis (dirFiles! = null && dirFiles.length> 0) {Arrays.sort (dirFiles, LastModifiedFileComparator.LASTMODIFIED_REVERSE); return dirFiles [0]; }} returner null; }

Som vist ovenfor bruker visingleton-forekomst LASTMODIFIED_REVERSE for å sortere vårt utvalg av filer i omvendt rekkefølge.

Siden matrisen er omvendt sortert, er den sist endrede filen det første elementet i matrisen.

5. Konklusjon

I denne opplæringen undersøkte vi forskjellige måter å finne den sist endrede filen i en bestemt katalog. Underveis brukte vi API-er som er en del av JDK og Apache Commons IO eksterne bibliotek.

Som alltid er den komplette kodekilden for eksemplene tilgjengelig på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found