Apache Commons IO

1. Áttekintés

Az Apache Commons projekt azzal a céllal jött létre, hogy a fejlesztők számára egy közös könyvtárat biztosítson, amelyeket a napi kódjukban felhasználhatnak.

Ebben az oktatóanyagban megvizsgáljuk a Commons IO modul néhány legfontosabb segédosztályát és azok legismertebb funkcióit.

2. Maven-függőség

A könyvtár használatához tegyük bele a következő Maven-függőséget a pom.xml:

 commons-io commons-io 2.5 

A könyvtár legújabb verziói megtalálhatók a Maven Central-ban.

3. Segédprogramok

Egyszerűen fogalmazva, a hasznossági osztályok olyan statikus módszereket tartalmaznak, amelyek használhatók fájlokon végezzen közös feladatokat.

3.1. FileUtils

Ez az osztály különböző műveleteket biztosít a fájlokkal, például megnyitást, olvasást, másolást és áthelyezést.

Nézzük fájlok olvasása vagy másolása felhasználásával FileUtils:

Fájlfájl = FileUtils.getFile (getClass (). GetClassLoader () .getResource ("fileTest.txt") .getPath ()); Fájl tempDir = FileUtils.getTempDirectory (); FileUtils.copyFileToDirectory (fájl, tempDir); Fájl newTempFile = FileUtils.getFile (tempDir, file.getName ()); Karakterlánc-adatok = FileUtils.readFileToString (newTempFile, Charset.defaultCharset ());

3.2. FilenameUtils

Ez a segédprogram egy operációs rendszer-agnosztikus módszer a fájlnevek közös funkcióinak végrehajtására. Nézzük meg a különböző módszereket, amelyeket alkalmazhatunk:

Karakterlánc fullPath = FilenameUtils.getFullPath (elérési út); Karaktersorozat = FilenameUtils.getExtension (elérési út); String baseName = FájlnévUtils.getBaseName (elérési út);

3.3. FileSystemUtils

Tudjuk használni FileSystemUtils nak nek ellenőrizze az adott kötet vagy meghajtó szabad helyét:

hosszú freeSpace = FileSystemUtils.freeSpaceKb ("/");

4. Bemenet és kimenet

Ez a csomag számos megvalósítást kínál a bemeneti és kimeneti folyamokkal dolgozni.

Összpontosítunk TeeInputStream és TeeOutputSteam. A szó "Póló”(A„TA „) általában annak leírására szolgál, hogy egyetlen bemenetet két különböző kimenetre kell felosztani.

Nézzünk meg egy példát, amely bemutatja, hogyan tudunk írjon egyetlen bemeneti adatfolyamot két különböző kimeneti adatfolyamba:

String str = "Hello World."; ByteArrayInputStream inputStream = új ByteArrayInputStream (str.getBytes ()); ByteArrayOutputStream outputStream1 = új ByteArrayOutputStream (); ByteArrayOutputStream outputStream2 = új ByteArrayOutputStream (); FilterOutputStream teeOutputStream = új TeeOutputStream (outputStream1, outputStream2); új TeeInputStream (inputStream, teeOutputStream, true) .read (új byte [str.length ()]); assertEquals (str, String.valueOf (outputStream1)); assertEquals (str, String.valueOf (outputStream2));

5. Szűrők

A Commons IO a hasznos fájlszűrők listáját tartalmazza. Ezek jól jöhetnek, ha egy fejlesztő akarja szűkítsen egy meghatározott kívánt fájllistára heterogén fájllistáról.

A könyvtár is támogatja ÉS és VAGY logikai műveletek egy adott fájllistán. Ezért ezeket a szűrőket összekeverhetjük a kívánt eredmény elérése érdekében.

Lássunk egy példát, amely felhasználja WildcardFileFilter és SuffixFileFilter fájlok letöltéséhez, amelyekple”Nevükben egy„txt”Utótag. Vegye figyelembe, hogy a fenti szűrőket a ANDFileFilter:

@Test public void, amikorGetFilewith_ANDFileFilter_thenFind_sample_txt () dobja az IOException {String path = getClass (). GetClassLoader () .getResource ("fileTest.txt") .getPath (); Fájl dir = FileUtils.getFile (FilenameUtils.getFullPath (elérési út)); assertEquals ("sample.txt", dir.list (új AndFileFilter (új WildcardFileFilter ("* ple *", IOCase.INSENSITIVE), új SuffixFileFilter ("txt"))) [0]); }

6. Összehasonlítók

A Összehasonlító csomag biztosítja különböző típusú összehasonlítások a fájlokon. Itt két különböző összehasonlítót vizsgálunk meg.

6.1. PathFileComparator

A PathFileComparator osztály használható fájlok listáit vagy tömbjeit rendezni az útjuk szerint akár kis-, akár kis- és nagybetűk, vagy rendszerfüggő kis- és nagybetűk között. Nézzük meg, hogyan rendezheti a fájlok elérési útjait az erőforrások könyvtárában ezzel a segédprogrammal:

@Test public void whenSortDirWithPathFileComparator_thenFirstFile_aaatxt () IOException dobja {PathFileComparator pathFileComparator = új PathFileComparator (IOCase.INSENSITIVE); Karakterlánc elérési útja = FilenameUtils.getFullPath (getClass () .getClassLoader () .getResource ("fileTest.txt") .getPath ()); Fájl dir = new Fájl (elérési út); Fájl [] fájlok = dir.listFiles (); pathFileComparator.sort (fájlok); assertEquals ("aaa.txt", fájlok [0] .getName ()); }

Ne feledje, hogy a IOCase.ÉRZÉKENY konfiguráció. PathFileComparator számosat is nyújt szingleton példányok, amelyeknek különbözik a kis- és nagybetû-különbség és a fordított rendezési opció.

Ezek a statikus mezők tartalmazzák PATH_COMPARATOR, PATH_INSENSITIVE_COMPARATOR, PATH_INSENSITIVE_REVERSE, PATH_SYSTEM_COMPARATOR, hogy csak néhányat említsek.

6.2. SizeFileComparator

SizeFileComparator amint a neve is mutatja, szokott hasonlítsa össze két fájl méretét (hosszát). Negatív egész értéket ad vissza, ha az első fájl mérete kisebb, mint a második fájl mérete. Nullát ad, ha a fájlméretek megegyeznek, és pozitív értéket, ha az első fájlméret nagyobb, mint a második fájlméret.

Írjunk egy egységtesztet, amely bemutatja a fájlméretek összehasonlítását:

@Test public void whenSizeFileComparator_thenLargerFile_large () dobja az IOException {SizeFileComparator sizeFileComparator = new SizeFileComparator (); Fájl nagyobbFile = FileUtils.getFile (getClass (). GetClassLoader () .getResource ("fileTest.txt") .getPath ()); Fájl kisebbFile = FileUtils.getFile (getClass (). GetClassLoader () .getResource ("sample.txt") .getPath ()); int i = sizeFileComparator.compare (nagyobbFájl, kisebbFájl); Assert.assertTrue (i> 0); }

7. File Monitor

A Commons IO monitor csomag biztosítja a képességet a fájl vagy könyvtár változásainak nyomon követése. Lássunk egy gyors példát arra, hogyan FileAlterationMonitor -val együtt használható FileAlterationObserver és FileAlterationListener fájl vagy mappa megfigyeléséhez.

Mikor FileAlterationMonitor indul, értesítéseket kapunk a fájlváltozásokról a figyelt könyvtárban:

FileAlterationObserver observer = új FileAlterationObserver (mappa); FileAlterationMonitor monitor = új FileAlterationMonitor (5000); FileAlterationListener fal = new FileAlterationListenerAdaptor () {@Override public void onFileCreate (File file) {// on create action} @Override public void onFileDelete (File file) {// on delete action}}; megfigyelő.addListener (fal); monitor.addObserver (megfigyelő); monitor.start ();

8. Következtetés

Ez a cikk a Commons IO csomag néhány gyakran használt összetevőjével foglalkozott. A csomag azonban sok más képességgel is rendelkezik. További részletekért olvassa el az API dokumentációját.

Az ebben a példában használt kód megtalálható a GitHub projektben.