Apache Commons IO

1. Prehľad

Projekt Apache Commons bol vytvorený s cieľom poskytnúť vývojárom sadu bežných knižníc, ktoré môžu používať vo svojom každodennom kóde.

V tomto výučbe sa oboznámime s niektorými kľúčovými triedami obslužného programu modulu Commons IO a ich najznámejšími funkciami.

2. Závislosť od Maven

Ak chcete používať knižnicu, zahrnime do súboru nasledujúcu závislosť Maven pom.xml:

 commons-io commons-io 2.5 

Najnovšie verzie knižnice nájdete v Maven Central.

3. Triedy úžitkovosti

Jednoducho povedané, triedy nástrojov poskytujú súbory statických metód, na ktoré sa dajú zvyknúť vykonávať bežné úlohy v súboroch.

3.1. FileUtils

Táto trieda poskytuje rôzne operácie so súbormi, napríklad otváranie, čítanie, kopírovanie a presúvanie.

Poďme sa pozrieť na ako čítať alebo kopírovať súbory použitím FileUtils:

File file = FileUtils.getFile (getClass (). GetClassLoader () .getResource ("fileTest.txt") .getPath ()); Súbor tempDir = FileUtils.getTempDirectory (); FileUtils.copyFileToDirectory (súbor, tempDir); Súbor newTempFile = FileUtils.getFile (tempDir, file.getName ()); Reťazec data = FileUtils.readFileToString (newTempFile, Charset.defaultCharset ());

3.2. FilenameUtils

Tento nástroj poskytuje operačný systém-agnostický spôsob vykonávania bežných funkcií pre názvy súborov. Pozrime sa na niektoré z rôznych metód, ktoré môžeme použiť:

Reťazec fullPath = FilenameUtils.getFullPath (cesta); Prípona reťazca = FilenameUtils.getExtension (cesta); Reťazec baseName = FilenameUtils.getBaseName (cesta);

3.3. FileSystemUtils

Môžeme použiť FileSystemUtils do skontrolujte voľné miesto na danom zväzku alebo jednotke:

long freeSpace = FileSystemUtils.freeSpaceKb ("/");

4. Vstup a výstup

Tento balík poskytuje niekoľko implementácií pre server práca so vstupnými a výstupnými tokmi.

Zameriame sa na TeeInputStream a TeeOutputSteam. Slovo "Tee“(Odvodené z písmena„T„) Sa zvyčajne používa na označenie toho, že jeden vstup sa má rozdeliť na dva rôzne výstupy.

Pozrime sa na príklad, ktorý ukazuje, ako môžeme zapísať jeden vstupný tok do dvoch rôznych výstupných tokov:

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

5. Filtre

Commons IO obsahuje zoznam užitočných filtrov súborov. Môžu sa vám hodiť, keď to vývojár chce zúžiť na konkrétny požadovaný zoznam súborov z heterogénneho zoznamu súborov.

Knižnica tiež podporuje A a ALEBO logické operácie na danom zozname súborov. Preto môžeme tieto filtre kombinovať a dosiahnuť požadovaný výsledok.

Pozrime sa na príklad, ktorý využíva Zástupný súborFilter a SuffixFileFilter načítať súbory, ktoré majú „ple“V ich menách s„TXT”Prípona. Všimnite si, že vyššie uvedené filtre zalamujeme pomocou ANDFileFilter:

@ Test public void whenGetFilewith_ANDFileFilter_thenFind_sample_txt () vyvolá IOException {reťazec path = getClass (). GetClassLoader () .getResource ("fileTest.txt") .getPath (); File dir = FileUtils.getFile (FilenameUtils.getFullPath (cesta)); assertEquals ("sample.txt", dir.list (new AndFileFilter (new WildcardFileFilter ("* ple *", IOCase.INSENSITIVE), new SuffixFileFilter ("txt"))) [0]); }

6. Komparátory

The Komparátor balíček poskytuje rôzne typy porovnávania v súboroch. Preskúmame tu dva rôzne komparátory.

6.1. PathFileComparator

The PathFileComparator triedy sa dá zvyknúť triediť zoznamy alebo polia súborov podľa ich cesty rozlišujú sa malé a veľké písmená, nerozlišujú sa malé a veľké písmená alebo sa v systéme rozlišujú malé a veľké písmená. Pozrime sa, ako pomocou tohto nástroja zoradiť cesty k súborom v adresári zdrojov:

@Test public void whenSortDirWithPathFileComparator_thenFirstFile_aaatxt () hodí IOException {PathFileComparator pathFileComparator = nový PathFileComparator (IOCase.INSENSITIVE); Reťazec path = FilenameUtils.getFullPath (getClass () .getClassLoader () .getResource ("fileTest.txt") .getPath ()); File dir = nový súbor (cesta); Súbor [] súbory = dir.listFiles (); pathFileComparator.sort (súbory); assertEquals ("aaa.txt", súbory [0] .getName ()); }

Všimnite si, že sme použili IOCase.INSENSITIVE konfigurácia. PathFileComparator tiež poskytuje množstvo jednotlivé prípady, ktoré majú rôzne možnosti rozlišovania malých a veľkých písmen a reverzného triedenia.

Tieto statické polia zahŕňajú PATH_COMPARATOR, PATH_INSENSITIVE_COMPARATOR, PATH_INSENSITIVE_REVERSE, PATH_SYSTEM_COMPARATOR, menovať málo.

6.2. SizeFileComparator

SizeFileComparator je, ako už jeho názov napovedá, zvyknutý porovnajte veľkosti (dĺžky) dvoch súborov. Vráti zápornú celočíselnú hodnotu, ak je veľkosť prvého súboru menšia ako veľkosť druhého súboru. Vráti nulu, ak sú veľkosti súborov rovnaké, a kladnú hodnotu, ak je veľkosť prvého súboru väčšia ako veľkosť druhého súboru.

Napíšeme test jednotky, ktorý demonštruje porovnanie veľkostí súborov:

@ Test public void whenSizeFileComparator_thenLargerFile_large () vyvolá IOException {SizeFileComparator sizeFileComparator = nový SizeFileComparator (); Súbor largerFile = FileUtils.getFile (getClass (). GetClassLoader () .getResource ("fileTest.txt") .getPath ()); Súbor smallerFile = FileUtils.getFile (getClass (). GetClassLoader () .getResource ("sample.txt") .getPath ()); int i = sizeFileComparator.compare (largerFile, smallerFile); Assert.assertTrue (i> 0); }

7. Monitor súborov

Balík monitorov Commons IO poskytuje túto schopnosť sledovať zmeny v súbore alebo adresári. Pozrime sa na krátky príklad ako FileAlterationMonitor možno použiť spolu s FileAlterationObserver a FileAlterationListener na sledovanie súboru alebo priečinka.

Kedy FileAlterationMonitor začne, začneme dostávať upozornenia na zmeny súborov v adresári, ktorý sa sleduje:

FileAlterationObserver observer = nový FileAlterationObserver (priečinok); Monitor FileAlterationMonitor = nový FileAlterationMonitor (5000); FileAlterationListener fal = new FileAlterationListenerAdaptor () {@Override public void onFileCreate (súbor súboru) {// on create action} @Override public void onFileDelete (file file) {// on delete action}}; observer.addListener (fal); monitor.addObserver (pozorovateľ); monitor.start ();

8. Záver

Tento článok sa venoval niektorým z bežne používaných komponentov balíka Commons IO. Balík však má aj mnoho ďalších funkcií. Ďalšie informácie nájdete v dokumentácii API.

Kód použitý v tomto príklade nájdete v projekte GitHub.


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