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.