Nájdite posledný upravený súbor v adresári pomocou Java

1. Prehľad

V tomto rýchlom výučbe sa bližšie pozrieme na to, ako nájsť posledný upravený súbor v konkrétnom adresári v Jave.

Najprv začneme so starým vstupom a výstupom a modernými API NIO. Potom uvidíme, ako pomocou knižnice Apache Commons IO dosiahnuť to isté.

2. Pomocou java.io API

Dedičstvo java.io balíček poskytuje Súbor triedy na zapuzdrenie abstraktnej reprezentácie názvov súborov a adresárov.

Našťastie Súbor triedy prichádza s praktickou metódou s názvom naposledy zmenené(). Táto metóda vráti posledný upravený čas súboru označený abstraktným názvom cesty.

Poďme sa teraz pozrieť na to, ako môžeme použiť java.io.Súbor triedy na dosiahnutie zamýšľaného účelu:

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

Ako vidíme, na prechádzanie radom súborov používame rozhranie Java 8 Stream API. Potom vyvoláme max () operácia na získanie súboru s najnovšími úpravami.

Všimnite si, že používame Voliteľné inštancia na zapuzdrenie naposledy upraveného súboru.

Majte na pamäti, že tento prístup je považovaný za starú módu a zastaraný. Môžeme ho však použiť, ak chceme zostať kompatibilný so starým svetom IO Java.

3. Používanie the java.nio API

Zavedenie NIO API je zlomovým bodom pre správu súborového systému. Nová verzia NIO.2 dodávaná v prostredí Java 7 prichádza so sadou vylepšených funkcií pre lepšiu správu a manipuláciu so súbormi.

V skutočnosti java.nio.file.files trieda ponúka veľkú flexibilitu, pokiaľ ide o manipuláciu so súbormi a adresármi v prostredí Java.

Pozrime sa teda, ako môžeme využiť Súbory triedy na získanie naposledy upraveného súboru v adresári:

public static Path findUsingNIOApi (String sdir) hodí IOException {Path dir = Paths.get (sdir); if (Files.isDirectory (dir)) {Voliteľné opPath = Files.list (dir) .filter (p ->! Files.isDirectory (p)) .sorted ((p1, p2) -> Long.valueOf (p2.toFile () .lastModified ()) .porovnať (p1.toFile (). lastModified ())) .findFirst (); if (opPath.isPresent ()) {návrat opPath.get (); }} return null; }

Podobne ako v prvom príklade sa spoliehame na to, že Steam API získava iba súbory. Potom triedime naše súbory podľa posledného upraveného času pomocou výrazu lambda.

4. Používanie Apache Commons IO

Apache Commons IO posunul správu súborového systému na vyššiu úroveň. Poskytuje súbor praktických tried, porovnávače súborov, filtre súborov a oveľa viac.

Našťastie pre nás, knižnica ponúkaLastModifiedFileComparator triedy, ktorú je možné použiť ako akomparátor na zoradenie poľa súborov podľa času poslednej zmeny.

Najskôr musíme pridať commons-io závislosť v našom pom.xml:

 commons-io commons-io 2.7 

Na záver si ukážeme, ako nájsť posledný upravený súbor v priečinku pomocou Apache Commons IO:

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

Ako je uvedené vyššie, používamesingletonová inštancia LASTMODIFIED_REVERSE zoradiť naše pole súborov v opačnom poradí.

Pretože je pole opačne zoradené, potom je posledný upravený súbor prvým prvkom poľa.

5. Záver

V tomto tutoriáli sme preskúmali rôzne spôsoby, ako nájsť naposledy upravený súbor v konkrétnom adresári. Po ceste sme používali API, ktoré sú súčasťou JDK a externej knižnice Apache Commons IO.

Kompletný zdrojový kód príkladov je ako vždy k dispozícii na GitHub.


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