Find den sidst ændrede fil i et bibliotek med Java

1. Oversigt

I denne hurtige vejledning skal vi se nærmere på, hvordan du finder den sidst ændrede fil i et bestemt bibliotek i Java.

Først starter vi med den ældre IO og de moderne NIO API'er. Derefter ser vi, hvordan vi bruger Apache Commons IO-biblioteket til at opnå det samme.

2. Brug af java.io API

Arven java.io pakken giver Fil klasse for at indkapsle en abstrakt repræsentation af fil- og katalogsti-navne.

Heldigvis, den Fil klasse kommer med en praktisk metode kaldet sidst ændret(). Denne metode returnerer den sidst ændrede tid for filen betegnet med et abstrakt stinavn.

Lad os nu se på, hvordan vi kan bruge java.io-fil klasse for at nå det tilsigtede formål:

public static File findUsingIOApi (String sdir) {File dir = new File (sdir); hvis (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 kan se, bruger vi Java 8 Stream API til at gennemløbe en række filer. Derefter påberåber vi os maks () operation for at få filen med de seneste ændringer.

Bemærk, at vi bruger en Valgfri instans for at indkapsle den sidst ændrede fil.

Husk, at denne tilgang betragtes som gammeldags og forældet. Vi kan dog bruge det, hvis vi vil være kompatible med Java-arven IO-verdenen.

3. Brug det java.nio API

Introduktionen af ​​NIO API er et vendepunkt for filsystemstyring. Den nye version NIO.2 leveret i Java 7 leveres med et sæt forbedrede funktioner til bedre filhåndtering og manipulation.

Faktisk er det java.nio.file.Files klasse tilbyder stor fleksibilitet, når det kommer til at manipulere filer og mapper i Java.

Så lad os se, hvordan vi kan gøre brug af Filer klasse for at få den sidst ændrede fil i et bibliotek:

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

På samme måde som det første eksempel er vi afhængige af Steam API for kun at få filer. Derefter sorterer vi vores filer baseret på den sidst ændrede tid ved hjælp af et lambda-udtryk.

4. Brug af Apache Commons IO

Apache Commons IO har ført filsystemstyring til det næste niveau. Det giver et sæt praktiske klasser, filkomparatorer, filfiltre og meget mere.

Heldigvis for os tilbyder biblioteketLastModifiedFileComparator klasse, der kan bruges som enkomparator for at sortere en række filer efter deres sidste ændrede tid.

For det første skal vi tilføje commons-io afhængighed i vores pom.xml:

 commons-io commons-io 2.7 

Endelig lad os vise, hvordan du finder den sidst ændrede fil i en mappe ved hjælp af Apache Commons IO:

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

Som vist ovenfor bruger visingleton-instans LASTMODIFIED_REVERSE for at sortere vores vifte af filer i omvendt rækkefølge.

Da arrayet er omvendt sorteret, er den sidst ændrede fil det første element i arrayet.

5. Konklusion

I denne vejledning undersøgte vi forskellige måder at finde den sidst ændrede fil i et bestemt bibliotek. Undervejs brugte vi API'er, der er en del af det eksterne bibliotek JDK og Apache Commons IO.

Som altid er den komplette kodekilde for eksemplerne tilgængelig på GitHub.


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