De Java-bestandsklasse

1. Overzicht

In deze tutorial geven we een overzicht van de het dossier class, die deel uitmaakt van de java.io API. De het dossier class geeft ons de mogelijkheid om met bestanden en mappen op het bestandssysteem te werken.

2. Een het dossier Voorwerp

De het dossier klasse heeft 4 openbare constructeurs. Afhankelijk van de behoeften van de ontwikkelaar, verschillende soorten exemplaren van het het dossier klasse kan worden gemaakt.

  • Bestand (tekenreekspadnaam) - Creëert een instantie die het gegeven vertegenwoordigt padnaam
  • Bestand (bovenliggende tekenreeks, onderliggende tekenreeks) - Maakt een instantie die het pad vertegenwoordigt dat is gevormd door samen te voegen met de ouder en de kind paden
  • Bestand (bovenliggende bestanden, onderliggende tekenreeks) - Maakt een instantie met het pad dat wordt gevormd door samen te voegen met de ouder pad vertegenwoordigd door een ander het dossier instantie en de kind pad
  • Bestand (URI uri) - Maakt een instantie die de opgegeven Uniform Resource Identifier vertegenwoordigt

3. Werken met de het dossier Klasse

De het dossier class heeft een aantal methoden waarmee we met bestanden op het bestandssysteem kunnen werken en deze kunnen manipuleren. We zullen er hier enkele uitlichten. Het is belangrijk op te merken dat de het dossier class kan de inhoud van het bestand dat het vertegenwoordigt niet wijzigen of openen.

3.1. Mappen en bestanden maken en verwijderen

De het dossier class heeft instantiemethoden om mappen en bestanden te maken en te verwijderen. Mappen en bestanden zijn gemaakt met behulp van de mkdir en createNewFile methoden, respectievelijk.

Mappen en bestanden zijn verwijderd met de verwijderen methode. Al deze methoden retourneren een boolean waarde dat is waar wanneer de operatie slaagt, en false anders:

@Test openbare leegte gegevenDir_whenMkdir_thenDirIsDeleted () {Bestandsmap = nieuw bestand ("dir"); assertTrue (directory.mkdir ()); assertTrue (directory.delete ()); } @Test openbare ongeldig gegevenFile_whenCreateNewFile_thenFileIsDeleted () {File file = new File ("file.txt"); probeer {assertTrue (file.createNewFile ()); } catch (IOException e) {fail ("Kon" + "file.txt niet aanmaken); } assertTrue (file.delete ()); }

In het bovenstaande fragment zien we ook andere nuttige methoden.

De isDirectory methode kan worden gebruikt om te testen of het bestand dat wordt aangegeven door de opgegeven naam een ​​map is, while de isFile methode kan worden gebruikt om te testen of het bestand dat wordt aangeduid met de opgegeven naam een ​​bestand is. En we kunnen gebruiken de bestaat methode om te testen of er al een map of bestand op het systeem bestaat.

3.2. Metagegevens verkrijgen over bestandsinstanties

De het dossier class heeft een aantal methoden die metadata retourneren over het dossier gevallen. Laten we eens kijken hoe we de getName, getParentFile, en getPath methoden:

@Test openbare ongeldig gegevenFile_whenCreateNewFile_thenMetadataIsCorrect () {String sep = File.separator; Bestand parentDir = makeDir ("filesDir"); File child = nieuw bestand (parentDir, "file.txt"); probeer {child.createNewFile (); } catch (IOException e) {fail ("Kon" + "file.txt niet aanmaken); } assertEquals ("file.txt", child.getName ()); assertEquals (parentDir.getName (), child.getParentFile (). getName ()); assertEquals (parentDir.getPath () + sep + "file.txt", child.getPath ()); removeDir (parentDir); }

Hier hebben we geïllustreerd hoe de metadata over het bestand dat in de directory is gemaakt, gevalideerd is. We hebben ook laten zien hoe u de ouder van het bestand en het relatieve pad naar dat bestand kunt vinden.

3.3. Machtigingen voor bestanden en mappen instellen

De het dossier class heeft methoden waarmee u machtigingen voor een bestand of map kunt instellen. Hier zullen we kijken naar de setWritable en setReadablemethoden:

@Test openbare ongeldig gegevenReadOnlyFile_whenCreateNewFile_thenCantModFile () {File parentDir = makeDir ("readDir"); File child = nieuw bestand (parentDir, "file.txt"); probeer {child.createNewFile (); } catch (IOException e) {fail ("Kon" + "file.txt niet aanmaken); } child.setWritable (false); boolean writable = true; probeer (FileOutputStream fos = nieuwe FileOutputStream (kind)) {fos.write ("Hallo wereld" .getBytes ()); // schrijfbewerking fos.flush (); } catch (IOException e) {writable = false; } eindelijk {removeDir (parentDir); } assertFalse (beschrijfbaar); }

In de bovenstaande code proberen we naar een bestand te schrijven nadat we er expliciet machtigingen voor hebben ingesteld die alle schrijfbewerkingen blokkeren. Dit doen we met de setWritable methode. Het is niet toegestaan ​​om naar een bestand te schrijven terwijl er naar het bestand wordt geschreven, wat resulteert in een IOException wordt gegooid.

Vervolgens proberen we uit een bestand te lezen nadat we er machtigingen voor hebben ingesteld die alle leesbewerkingen blokkeren. Leest worden geblokkeerd met behulp van de setReadable methode:

@Test openbare ongeldig gegevenWriteOnlyFile_whenCreateNewFile_thenCantReadFile () {File parentDir = makeDir ("writeDir"); File child = nieuw bestand (parentDir, "file.txt"); probeer {child.createNewFile (); } catch (IOException e) {fail ("Kon" + "file.txt niet aanmaken); } child.setReadable (false); boolean readable = true; probeer (FileInputStream fis = nieuwe FileInputStream (kind)) {fis.read (); // leesbewerking} catch (IOException e) {readable = false; } eindelijk {removeDir (parentDir); } assertFalse (leesbaar); }

Opnieuw, de JVM zal een IOException voor pogingen om een ​​bestand te lezen waar lezen niet is toegestaan.

3.4. Lijst van bestanden in een directory

De het dossier class heeft methoden waarmee we bestanden in een map kunnen weergeven. Evenzo kunnen mappen ook worden vermeld. Hier zullen we kijken naar de lijst en lijst (FilenameFilter) methoden:

@Test openbare leegte gegevenFilesInDir_whenCreateNewFile_thenCanListFiles () {Bestand parentDir = makeDir ("filtersDir"); String [] bestanden = {"file1.csv", "file2.txt"}; voor (String-bestand: bestanden) {probeer {nieuw bestand (parentDir, bestand) .createNewFile (); } catch (IOException e) {fail ("Kon niet maken" + bestand); }} // normale lijst assertEquals (2, parentDir.list (). length); // gefilterde lijst FilenameFilter csvFilter = (dir, ext) -> ext.endsWith (". csv"); assertEquals (1, parentDir.list (csvFilter) .length); removeDir (parentDir); }

We hebben een map gemaakt en er twee bestanden aan toegevoegd - een met de extensie csv extensie en de andere met een tekst uitbreiding. Bij het opsommen van alle bestanden in de map, krijgen we twee bestanden zoals verwacht. Wanneer we de lijst filteren door rond bestanden met een csv extensie, krijgen we slechts één bestand geretourneerd.

3.5. Hernoemen van bestanden en mappen

De het dossier class heeft de functionaliteit van het hernoemen van bestanden en mappen de ... gebruiken hernoemenNaar methode:

@Test openbare leegte gegevenDir_whenMkdir_thenCanRenameDir () {Bestandsbron = makeDir ("bron"); Bestandsbestemming = makeDir ("bestemming"); boolean hernoemd = source.renameTo (bestemming); if (hernoemd) {assertFalse (source.isDirectory ()); assertTrue (bestemming.isDirectory ()); removeDir (bestemming); }}

In het bovenstaande voorbeeld maken we twee mappen: de bron- en de bestemmingsmap. Wij dan hernoem de bronmap naar de bestemmingsmap met behulp van de hernoemenNaar methode. Hetzelfde kan worden gebruikt om bestanden te hernoemen in plaats van mappen.

3.6. Informatie over schijfruimte ophalen

De het dossier class stelt ons ook in staat om informatie over de schijfruimte op te halen. Laten we eens kijken naar een demonstratie van de getFreeSpace methode:

@Test openbare ongeldige gegevenDataWritten_whenWrite_thenFreeSpaceReduces () {String home = System.getProperty ("user.home"); String sep = File.separator; Bestand testDir = makeDir (home + sep + "test"); File sample = nieuw bestand (testDir, "sample.txt"); lang freeSpaceBefore = testDir.getFreeSpace (); probeer {writeSampleDataToFile (sample); } catch (IOException e) {fail ("Kon niet schrijven naar" + "sample.txt"); } lang freeSpaceAfter = testDir.getFreeSpace (); assertTrue (freeSpaceAfter <freeSpaceBefore); removeDir (testDir); }

In dit voorbeeld hebben we een map gemaakt in de homedirectory van de gebruiker en vervolgens een bestand erin gemaakt. We hebben toen gecontroleerd of de vrije ruimte op de homedirectorypartitie was gewijzigd nadat we dit bestand met wat tekst hadden gevuld. Andere methoden die informatie geven over schijfruimte zijn getTotalSpace en getUsableSpace.

4. Conclusie

In deze zelfstudie hebben we enkele van de functionaliteit van de het dossier class voorziet in het werken met bestanden en mappen op het bestandssysteem. .

Zoals altijd is de volledige broncode van het voorbeeld beschikbaar op Github.