Keresse meg az Utoljára módosított fájlt egy Java-könyvtárban

1. Áttekintés

Ebben a gyors bemutatóban alaposan megvizsgáljuk, hogyan találhatjuk meg az utolsó módosított fájlt egy adott Java könyvtárban.

Először a régi IO-val és a modern NIO API-kkal kezdjük. Ezután meglátjuk, hogyan lehet az Apache Commons IO könyvtárat használni ugyanarra a dologra.

2. A java.io API

Az örökség java.io csomag biztosítja a File osztályba foglalja a fájlok és könyvtárak elérési útjának elvont ábrázolását.

Szerencsére a File osztály egy praktikus módszerrel jár utoljára módosítva(). Ez a módszer a fájl utolsó módosított idejét adja meg, amelyet elvont útvonalnév jelöl.

Most nézzük meg, hogyan használhatjuk a java.io.Fájl osztály a tervezett cél elérése érdekében:

public static File findUsingIOApi (String sdir) {File dir = new File (sdir); if (dir.isDirectory ()) {Opcionális opFile = Tömbök.stream (dir.listFiles (Fájl :: isFile)) .max ((f1, f2) -> Long.compare (f1.lastModified (), f2.lastModified ( ))); if (opFile.isPresent ()) {return opFile.get (); }} return null; }

Mint láthatjuk, a Java 8 Stream API-t használjuk a fájlok tömbjének áttekintéséhez. Ezután meghívjuk a max () művelet a fájl legutóbbi módosításokkal történő megszerzéséhez.

Vegyük észre, hogy egy Választható példány az utolsó módosított fájl beágyazására.

Ne feledje, hogy ezt a megközelítést régimódinak és elavultnak tekintik. Használhatjuk azonban, ha kompatibilisek akarunk maradni a Java örökölt IO világával.

3. Használata a java.nio API

Az NIO API bevezetése fordulópont a fájlrendszer kezelésében. A Java 7-ben szállított új NIO.2 verzió egy továbbfejlesztett funkcióval rendelkezik a jobb fájlkezelés és manipuláció érdekében.

Ami azt illeti, a java.nio.file.Files osztály nagy rugalmasságot kínál a fájlok és könyvtárak Java-ban történő kezelésében.

Tehát nézzük meg, hogyan használhatjuk a Fájlok osztály az utolsó módosított fájl megszerzéséhez egy könyvtárban:

public static Path findUsingNIOApi (String sdir) dobja az IOException-t {Path dir = Paths.get (sdir); if (Files.isDirectory (dir)) {Opcionális opPath = Files.list (dir) .filter (p ->! Files.isDirectory (p)) .sorted ((p1, p2) -> Long.valueOf (p2.toFile) () .lastModified ()) .compareTo (p1.toFile (). lastModified ())) .findFirst (); if (opPath.isPresent ()) {return opPath.get (); }} return null; }

Az első példához hasonlóan a Steam API-ra is támaszkodunk, hogy csak fájlokat kapjon. Ezután a legutóbb módosított időpont alapján rendezzük a fájljainkat egy lambda kifejezés segítségével.

4. Az Apache Commons IO használata

Az Apache Commons IO a fájlrendszer-kezelést a következő szintre emelte. Ez egy sor praktikus osztályt, fájlösszehasonlítókat, fájlszűrőket és még sok minden mást tartalmaz.

Szerencsénkre a könyvtár kínálja aLastModifiedFileComparator osztály, amely a-ként használhatóösszehasonlító egy tömb fájl rendezéséhez az utolsó módosított idő szerint.

Először hozzá kell adnunk a commons-io függőség a mi pom.xml:

 commons-io commons-io 2.7 

Végül mutassuk be, hogyan lehet megtalálni az utolsó módosított fájlt egy mappában az Apache Commons IO használatával:

public static File findUsingCommonsIO (String sdir) {Fájl dir = új Fájl (sdir); if (dir.isDirectory ()) {File [] dirFiles = dir.listFiles ((FileFilter) FileFilterUtils.fileFileFilter ()); if (dirFiles! = null && dirFiles.length> 0) {Arrays.sort (dirFiles, LastModifiedFileComparator.LASTMODIFIED_REVERSE); visszatér dirFiles [0]; }} return null; }

A fentiek szerint aegyedi példány LASTMODIFIED_REVERSE hogy a fájltömböt fordított sorrendben rendezzük.

Mivel a tömb fordított rendezésű, akkor a tömb első eleme az utolsó módosított fájl.

5. Következtetés

Ebben az oktatóanyagban különböző módokat tártunk fel az utoljára módosított fájl megkeresésére egy adott könyvtárban. Útközben olyan API-kat használtunk, amelyek a JDK és az Apache Commons IO külső könyvtár részét képezik.

Mint mindig, a példák teljes kódforrása elérhető a GitHubon.