Apache Commons IO

1. Oversikt

Apache Commons-prosjektet ble opprettet for å gi utviklere et sett med vanlige biblioteker som de kan bruke i sin daglige kode.

I denne opplæringen vil vi utforske noen av de viktigste verktøyklassene i Commons IO-modulen og deres mest kjente funksjoner.

2. Maven avhengighet

For å bruke biblioteket, la oss ta med følgende Maven-avhengighet i pom.xml:

 commons-io commons-io 2.5 

De nyeste versjonene av biblioteket finner du i Maven Central.

3. Utility Classes

Enkelt sagt, verktøyklasser gir sett med statiske metoder som kan brukes til utføre vanlige oppgaver på filer.

3.1. FileUtils

Denne klassen gir forskjellige operasjoner på filer, for eksempel å åpne, lese, kopiere og flytte.

La oss se på hvordan du leser eller kopierer filer ved hjelp av FileUtils:

Filfil = FileUtils.getFile (getClass (). GetClassLoader () .getResource ("fileTest.txt") .getPath ()); Fil tempDir = FileUtils.getTempDirectory (); FileUtils.copyFileToDirectory (fil, tempDir); Fil newTempFile = FileUtils.getFile (tempDir, file.getName ()); String data = FileUtils.readFileToString (newTempFile, Charset.defaultCharset ());

3.2. FilnavnUtils

Dette verktøyet gir en operativsystem-agnostisk måte å utføre vanlige funksjoner på filnavn på. La oss se noen av de forskjellige metodene vi kan bruke:

String fullPath = FilnavnUtils.getFullPath (sti); Strengforlengelse = FilnavnUtils.getExtension (bane); String baseName = FilnavnUtils.getBaseName (sti);

3.3. FileSystemUtils

Vi kan bruke FileSystemUtils til sjekk ledig plass på et gitt volum eller stasjon:

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

4. Inngang og utgang

Denne pakken inneholder flere implementeringer for arbeider med inngangs- og utgangsstrømmer.

Vi vil fokusere på TeeInputStream og TeeOutputSteam. Ordet "Tee”(Avledet fra bokstaven“T“) Brukes vanligvis til å beskrive at en enkelt inngang skal deles i to forskjellige utganger.

La oss se på et eksempel som demonstrerer hvordan vi kan skriv en enkelt inngangsstrøm til to forskjellige utgangsstrømmer:

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

5. Filtre

Commons IO inneholder en liste over nyttige filtre. Disse kan komme til nytte når en utvikler vil begrense til en bestemt ønsket liste over filer fra en heterogen liste over filer.

Biblioteket støtter også OG og ELLER logiske operasjoner på en gitt filliste. Derfor kan vi blande og matche disse filtrene for å få ønsket resultat.

La oss se et eksempel som bruker WildcardFileFilter og SuffixFileFilter for å hente filer som har “ple”I navnene med en”tekst" suffiks. Merk at vi pakker over filtrene ved hjelp av ANDFileFilter:

@Test offentlig ugyldig nårGetFilewith_ANDFileFilter_thenFind_sample_txt () kaster IOException {Stringsti = getClass (). GetClassLoader () .getResource ("fileTest.txt") .getPath (); Fil dir = FileUtils.getFile (FilnavnUtils.getFullPath (bane)); assertEquals ("sample.txt", dir.list (new AndFileFilter (new WildcardFileFilter ("* ple *", IOCase.INSENSITIVE), new SuffixFileFilter ("txt"))) [0]); }

6. Komparatorer

De Komparator pakken gir forskjellige typer sammenligninger på filer. Vi vil utforske to forskjellige komparatorer her.

6.1. PathFileComparator

De PathFileComparator klasse kan brukes til sortere lister eller matriser av filer etter stien enten på en saks-, saks- eller systemavhengig saksfølsom måte. La oss se hvordan du sorterer filstier i ressurskatalogen ved hjelp av dette verktøyet:

@Test offentlig ugyldig nårSortDirWithPathFileComparator_thenFirstFile_aaatxt () kaster IOException {PathFileComparator pathFileComparator = ny PathFileComparator (IOCase.INSENSITIVE); Strengsti = FilnavnUtils.getFullPath (getClass () .getClassLoader () .getResource ("fileTest.txt") .getPath ()); Fil dir = ny fil (bane); Fil [] filer = dir.listFiles (); pathFileComparator.sort (filer); assertEquals ("aaa.txt", filer [0] .getName ()); }

Merk at vi har brukt IOCase.INSENSITIVE konfigurasjon. PathFileComparator gir også en rekke singleton-forekomster som har forskjellige skiftesensitivitet og omvendt sortering.

Disse statiske feltene inkluderer PATH_COMPARATOR, PATH_INSENSITIVE_COMPARATOR, PATH_INSENSITIVE_REVERSE, PATH_SYSTEM_COMPARATOR, for å nevne noen.

6.2. SizeFileComparator

SizeFileComparator er, som navnet antyder, vant til sammenlign størrelser (lengder) på to filer. Den returnerer en negativ heltallverdi hvis den første filens størrelse er mindre enn den for den andre filen. Den returnerer null hvis filstørrelsene er like, og en positiv verdi hvis den første filens størrelse er større enn den andre filens størrelse.

La oss skrive en enhetstest som viser en sammenligning av filstørrelser:

@Test offentlig ugyldig nårSizeFileComparator_thenLargerFile_large () kaster IOException {SizeFileComparator sizeFileComparator = ny SizeFileComparator (); Fil largerFile = FileUtils.getFile (getClass (). GetClassLoader () .getResource ("fileTest.txt") .getPath ()); Fil smallerFile = FileUtils.getFile (getClass (). GetClassLoader () .getResource ("sample.txt") .getPath ()); int i = sizeFileComparator.compare (largerFile, smallerFile); Assert.assertTrue (i> 0); }

7. Filovervåker

Commons IO-skjermpakken gir muligheten til å spore endringer i en fil eller katalog. La oss se et raskt eksempel på hvordan FileAlterationMonitor kan brukes sammen med FileAlterationObserver og FileAlterationListener for å overvåke en fil eller mappe.

Når FileAlterationMonitor starter, begynner vi å motta varsler om filendringer i katalogen som overvåkes:

FileAlterationObserver observatør = ny FileAlterationObserver (mappe); FileAlterationMonitor monitor = ny FileAlterationMonitor (5000); FileAlterationListener fal = new FileAlterationListenerAdaptor () {@Override public void onFileCreate (File file) {// on create action} @Override public void onFileDelete (File file) {// on delete action}}; observer.addListener (fal); monitor.addObserver (observatør); monitor.start ();

8. Konklusjon

Denne artikkelen dekket noen av de vanligste komponentene i Commons IO-pakken. Imidlertid kommer pakken med mange andre muligheter også. Se API-dokumentasjonen for mer informasjon.

Koden som brukes i dette eksemplet finner du i GitHub-prosjektet.


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