Apache Commons IO

1. Oversigt

Apache Commons-projektet blev oprettet for at give udviklere et sæt almindelige biblioteker, som de kan bruge i deres daglige kode.

I denne vejledning undersøger vi nogle af de vigtigste nytteklasser i Commons IO-modulet og deres mest kendte funktioner.

2. Maven-afhængighed

For at bruge biblioteket, lad os medtage følgende Maven-afhængighed i pom.xml:

 commons-io commons-io 2.5 

De nyeste versioner af biblioteket findes i Maven Central.

3. Værktøjsklasser

Kort sagt, hjælpeklasser giver sæt statiske metoder, der kan bruges til udføre almindelige opgaver på filer.

3.1. FileUtils

Denne klasse giver forskellige handlinger på filer, såsom åbning, læsning, kopiering og flytning.

Lad os se på hvordan man læser eller kopierer filer ved brug af 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 værktøj giver en operativsystem-agnostisk måde at udføre almindelige funktioner på filnavne på. Lad os se nogle af de forskellige metoder, vi kan bruge:

String fullPath = FilnavnUtils.getFullPath (sti); Strengeforlængelse = FilnavnUtils.getExtension (sti); String baseName = FilnavnUtils.getBaseName (sti);

3.3. FileSystemUtils

Vi kan bruge FileSystemUtils til tjek den ledige plads på en given lydstyrke eller drev:

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

4. Indgang og udgang

Denne pakke indeholder flere implementeringer til arbejde med input og output streams.

Vi fokuserer på TeeInputStream og TeeOutputSteam. Ordet "Tee”(Afledt af bogstavet“T“) Bruges normalt til at beskrive, at en enkelt indgang skal opdeles i to forskellige udgange.

Lad os se på et eksempel, der viser, hvordan vi kan skriv en enkelt inputstrøm til to forskellige outputstrømme:

String str = "Hej verden."; ByteArrayInputStream inputStream = ny ByteArrayInputStream (str.getBytes ()); ByteArrayOutputStream outputStream1 = ny ByteArrayOutputStream (); ByteArrayOutputStream outputStream2 = ny ByteArrayOutputStream (); FilterOutputStream teeOutputStream = ny TeeOutputStream (outputStream1, outputStream2); ny TeeInputStream (inputStream, teeOutputStream, sand) .læs (ny byte [str.length ()]); assertEquals (str, String.valueOf (outputStream1)); assertEquals (str, String.valueOf (outputStream2));

5. Filtre

Commons IO indeholder en liste over nyttige filfiltre. Disse kan være nyttige, når en udvikler ønsker det indsnævre til en bestemt ønsket liste over filer fra en heterogen liste over filer.

Biblioteket understøtter også OG og ELLER logiske operationer på en given filliste. Derfor kan vi blande og matche disse filtre for at få det ønskede resultat.

Lad os se et eksempel, der gør brug af WildcardFileFilter og SuffixFileFilter for at hente filer, der har “ple”I deres navne med en”txt”Suffiks. Bemærk, at vi pakker ovenstående filtre ved hjælp af ANDFileFilter:

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

6. Komparatorer

Det Komparator pakke giver forskellige typer sammenligninger af filer. Vi undersøger to forskellige komparatorer her.

6.1. PathFileComparator

Det PathFileComparator klasse kan bruges til sorter lister eller arrays af filer efter deres sti enten på en sags-, sags- eller systemafhængig sagsfølsom måde. Lad os se, hvordan man sorterer filstier i ressourcemappen ved hjælp af dette værktøj:

@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 (sti); Fil [] filer = dir.listFiles (); pathFileComparator.sort (filer); assertEquals ("aaa.txt", filer [0] .getName ()); }

Bemærk, at vi har brugt IOCase.INSENSITIVE konfiguration. PathFileComparator giver også et antal singleton-tilfælde, der har forskellige muligheder for store og små bogstaver og omvendt sortering.

Disse statiske felter inkluderer PATH_COMPARATOR, PATH_INSENSITIVE_COMPARATOR, PATH_INSENSITIVE_REVERSE, PATH_SYSTEM_COMPARATOR, for at nævne nogle få.

6.2. SizeFileComparator

SizeFileComparator er, som navnet antyder, brugt til sammenlign størrelser (længder) på to filer. Det returnerer en negativ heltalværdi, hvis den første fils størrelse er mindre end den anden fil. Det returnerer nul, hvis filstørrelserne er ens, og en positiv værdi, hvis den første fils størrelse er større end den anden fils størrelse.

Lad os skrive en enhedstest, der viser en sammenligning af 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ågning

Commons IO-overvågningspakken giver mulighed for spore ændringer til en fil eller mappe. Lad os se et hurtigt eksempel på hvordan FileAlterationMonitor kan bruges sammen med FileAlterationObserver og FileAlterationListener for at overvåge en fil eller mappe.

Hvornår FileAlterationMonitor starter, begynder vi at modtage meddelelser om filændringer i den mappe, der overvåges:

FileAlterationObserver observatør = ny FileAlterationObserver (mappe); FileAlterationMonitor monitor = ny FileAlterationMonitor (5000); FileAlterationListener fal = ny 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. Konklusion

Denne artikel dækkede nogle af de almindeligt anvendte komponenter i Commons IO-pakken. Pakken leveres dog også med mange andre muligheder. Se API-dokumentation for flere detaljer.

Koden, der bruges i dette eksempel, kan findes i GitHub-projektet.


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