Trieda súborov Java

1. Prehľad

V tomto výučbe poskytneme prehľad Súbor triedy, ktorá je súčasťou java.io API. The Súbor trieda nám dáva možnosť pracovať so súbormi a adresármi v súborovom systéme.

2. Vytvorenie a Súbor Objekt

The Súbor trieda má 4 verejných konštruktérov. V závislosti na potrebách vývojára môžu byť rôzne typy inštancií Súbor môže byť vytvorená trieda.

  • Súbor (názov reťazca) - Vytvorí inštanciu predstavujúcu dané názov cesty
  • Súbor (reťazec rodič, reťazec dieťa) - Vytvorí inštanciu, ktorá predstavuje cestu vytvorenú spojením rodič a dieťa cesty
  • Súbor (nadradený súbor, podriadený reťazec) - Vytvorí inštanciu s cestou vytvorenou spojením rodič cesta predstavovaná iným Súbor inštancie a dieťa cesta
  • Súbor (URI uri) - Vytvorí inštanciu, ktorá predstavuje daný Uniform Resource Identifier

3. Práca s Súbor Trieda

The Súbor trieda má množstvo metód, ktoré nám umožňujú pracovať so súbormi v systéme súborov a manipulovať s nimi. Niektoré z nich tu zvýrazníme. Je dôležité poznamenať, že Súbor trieda nemôže upravovať alebo pristupovať k obsahu súboru, ktorý predstavuje.

3.1. Vytváranie a mazanie adresárov a súborov

The Súbor trieda má inštančné metódy na vytváranie a mazanie adresárov a súborov. Adresáre a súbory sú vytvorené pomocou mkdir a createNewFile metódy, resp.

Adresáre a súbory sú vymazané pomocou vymazať metóda. Všetky tieto metódy vracajú a boolovský hodnota, ktorá je pravda keď je operácia úspešná, a nepravdivé inak:

@Test public void givenDir_whenMkdir_thenDirIsDeleted () {adresár súborov = nový súbor ("dir"); assertTrue (adresár.mkdir ()); assertTrue (adresár.delete ()); } @Test public void givenFile_whenCreateNewFile_thenFileIsDeleted () {File file = new File ("file.txt"); try {assertTrue (file.createNewFile ()); } catch (IOException e) {fail ("Nepodarilo sa vytvoriť" + "file.txt"); } assertTrue (file.delete ()); }

Vo vyššie uvedenom úryvku tiež vidíme ďalšie užitočné metódy.

The isDirectory metóda možno použiť na testovanie, či je súbor označený zadaným názvom adresár, zatiaľ čo the isFile metóda možno použiť na testovanie, či je súbor označený zadaným názvom súbor. A môžeme použiť the existuje metóda na otestovanie, či adresár alebo súbor už v systéme existuje.

3.2. Získanie metadát o inštanciách súborov

The Súbor trieda má množstvo metód, ktoré vracajú metadáta Súbor inštancie. Pozrime sa, ako používať getName, getParentFile, a getPath metódy:

@Test public void givenFile_whenCreateNewFile_thenMetadataIsCorrect () {String sep = File.separator; Súbor parentDir = makeDir ("filesDir"); File child = new File (parentDir, "file.txt"); try {child.createNewFile (); } catch (IOException e) {fail ("Nepodarilo sa vytvoriť" + "file.txt"); } assertEquals ("file.txt", child.getName ()); assertEquals (parentDir.getName (), child.getParentFile (). getName ()); assertEquals (parentDir.getPath () + sep + "file.txt", child.getPath ()); removeDir (parentDir); }

Tu sme ilustrovali validáciu metadát o súbore, ktorý bol vytvorený v adresári. Ukázali sme tiež, ako nájsť nadradenú položku súboru a relatívnu cestu k tomuto súboru.

3.3. Nastavenie povolení súborov a adresárov

The Súbor trieda má metódy, ktoré vám umožňujú nastaviť povolenia pre súbor alebo adresár. Tu sa pozrieme na setWritable a setReadablemetódy:

@Test public void givenReadOnlyFile_whenCreateNewFile_thenCantModFile () {File parentDir = makeDir ("readDir"); File child = new File (parentDir, "file.txt"); try {child.createNewFile (); } catch (IOException e) {fail ("Nepodarilo sa vytvoriť" + "file.txt"); } child.setWritable (false); booleovský zapisovateľný = true; try (FileOutputStream fos = nový FileOutputStream (dieťa)) {fos.write ("Hello World" .getBytes ()); // zápis operácie fos.flush (); } catch (IOException e) {writeable = false; } nakoniec {removeDir (parentDir); } assertFalse (zapisovateľné); }

Vo vyššie uvedenom kóde sa pokúsime zapísať do súboru potom, čo sme naň výslovne nastavili povolenia, ktoré blokujú akékoľvek zápisy. Robíme to pomocou setWritable metóda. Pokus o zápis do súboru pri zápise do súboru nie je povolený. Výsledkom bude a Výnimka IO byť vyhodený.

Ďalej sa pokúsime čítať zo súboru po nastavení povolení, ktoré blokuje čítanie. Čítania sú blokované pomocou setReadable metóda:

@Test public void givenWriteOnlyFile_whenCreateNewFile_thenCantReadFile () {File parentDir = makeDir ("writeDir"); File child = new File (parentDir, "file.txt"); try {child.createNewFile (); } catch (IOException e) {fail ("Nepodarilo sa vytvoriť" + "file.txt"); } child.setReadable (false); boolean readable = true; try (FileInputStream fis = nový FileInputStream (dieťa)) {fis.read (); // operácia čítania} catch (IOException e) {readable = false; } nakoniec {removeDir (parentDir); } assertFalse (čitateľné); }

Opäť JVM hodí a Výnimka IO pre pokusy o čítanie súboru, kde čítanie nie je povolené.

3.4. Zoznam súborov v adresári

The Súbor trieda má metódy, ktoré nám umožňujú zoznam súborov obsiahnutých v adresári. Podobne môžu byť uvedené aj adresáre. Tu sa pozrieme na zoznam a zoznam (FilenameFilter) metódy:

@Test public void givenFilesInDir_whenCreateNewFile_thenCanListFiles () {File parentDir = makeDir ("filtersDir"); Reťazec [] files = {"file1.csv", "file2.txt"}; pre (String file: files) {try {new File (parentDir, file) .createNewFile (); } catch (IOException e) {fail ("Nepodarilo sa vytvoriť" + súbor); }} // normálny výpis assertEquals (2, parentDir.list (). dĺžka); // filtrovaný výpis FilenameFilter csvFilter = (dir, ext) -> ext.endsWith (". csv"); assertEquals (1, parentDir.list (csvFilter) .length); removeDir (parentDir); }

Vytvorili sme adresár a pridali sme doň dva súbory - jeden s a csv predĺženie a druhý s a TXT predĺženie. Pri zozname všetkých súborov v adresári dostaneme podľa očakávania dva súbory. Keď filtrujeme záznam filtrovaním okolo súborov pomocou a csv príponu, vráti sa nám iba jeden súbor.

3.5. Premenovanie súborov a adresárov

The Súbor trieda má funkčnosť premenovania súborov a adresárov pomocou premenovaťTo metóda:

@Test public void givenDir_whenMkdir_thenCanRenameDir () {zdroj súboru = makeDir ("zdroj"); Cieľ súboru = makeDir ("cieľ"); boolean renamed = source.renameTo (cieľ); if (premenovaný) {assertFalse (source.isDirectory ()); assertTrue (destination.isDirectory ()); removeDir (cieľ); }}

V príklade vyššie vytvoríme dva adresáre - zdrojový a cieľový adresár. My potom premenujte zdrojový adresár na cieľový pomocou premenovaťTo metóda. To isté sa dá použiť na premenovanie súborov namiesto adresárov.

3.6. Získavanie informácií o disku

The Súbor trieda nám tiež umožňuje získať informácie o mieste na disku. Pozrime sa a ukážka getFreeSpace metóda:

@Test public void givenDataWritten_whenWrite_thenFreeSpaceReduces () {String home = System.getProperty ("user.home"); Reťazec sep = File.separator; Súbor testDir = makeDir (domov + sep + "test"); Ukážka súboru = nový súbor (testDir, "sample.txt"); long freeSpaceBefore = testDir.getFreeSpace (); try {writeSampleDataToFile (sample); } catch (IOException e) {fail ("Nepodarilo sa zapísať do" + "sample.txt"); } dlho freeSpaceAfter = testDir.getFreeSpace (); assertTrue (freeSpaceAfter <freeSpaceBefore); removeDir (testDir); }

V tomto príklade sme vytvorili adresár vo vnútri domovského adresára používateľa a potom sme v ňom vytvorili súbor. Po vyplnení tohto súboru nejakým textom sme potom skontrolovali, či sa zmenilo voľné miesto v oddiele domovského adresára. Ďalšie metódy, ktoré poskytujú informácie o mieste na disku, sú getTotalSpace a getUsableSpace.

4. Záver

V tomto tutoriáli sme si ukázali niektoré z funkcií Súbor trieda umožňuje prácu so súbormi a adresármi v súborovom systéme. .

Celý zdrojový kód príkladu je ako vždy k dispozícii na stránkach Github.


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