Klasa Java datoteke

1. Pregled

U ovom uputstvu dat ćemo pregled Datoteka klase, koja je dio java.io API. The Datoteka klasa daje nam mogućnost rada s datotekama i direktorijima na datotečnom sustavu.

2. Stvaranje a Datoteka Objekt

The Datoteka razred ima 4 javna konstruktora. Ovisno o potrebama programera, različite vrste instanci Datoteka klasa se može stvoriti.

  • Datoteka (niz putanje niza) - Stvara instancu koja predstavlja dano naziv puta
  • Datoteka (roditelj niza, podređeno dijete niza) - Stvara instancu koja predstavlja put formiran pridruživanjem roditelj i dijete staze
  • Datoteka (roditelj datoteke, podređeno dijete) - Stvara instancu s putanjom formiranom pridruživanjem roditelj put koji predstavlja drugi Datoteka instanci i dijete staza
  • Datoteka (URI uri) - Stvara instancu koja predstavlja zadani jedinstveni identifikator resursa

3. Suradnja s Datoteka Razred

The Datoteka class ima brojne metode koje nam omogućuju rad s datotekama na datotečnom sustavu i manipulaciju njima. Ovdje ćemo istaknuti neke od njih. Važno je napomenuti da Datoteka klasa ne može mijenjati niti pristupati sadržaju datoteke koju predstavlja.

3.1. Stvaranje i brisanje direktorija i datoteka

The Datoteka class ima metode instance za stvaranje i brisanje direktorija i datoteka. Katalozi i datoteke su stvoren pomoću mkdir i createNewFile metode, odnosno.

Katalozi i datoteke su obrisano pomoću izbrisati metoda. Sve ove metode vraćaju a boolean vrijednost koja je pravi kada operacija uspije i lažno inače:

@Test javna praznina givenDir_whenMkdir_thenDirIsDeleted () {Direktorij datoteke = nova datoteka ("dir"); assertTrue (directory.mkdir ()); assertTrue (directory.delete ()); } @Test javna praznina givenFile_whenCreateNewFile_thenFileIsDeleted () {Datoteka datoteke = nova datoteka ("file.txt"); isprobajte {assertTrue (file.createNewFile ()); } catch (IOException e) {fail ("Nije moguće stvoriti" + "file.txt"); } assertTrue (file.delete ()); }

U gornjem isječku također vidimo druge korisne metode.

The isDirectory metoda može se koristiti za testiranje je li datoteka označena navedenim imenom direktorij, dok the isFile metoda može se koristiti za testiranje je li datoteka označena navedenim imenom datoteka. I, možemo koristiti the postoji metoda kako bi provjerili postoji li direktorij ili datoteka u sustavu.

3.2. Dobivanje metapodataka o instancama datoteka

The Datoteka klasa ima brojne metode koje vraćaju metapodatke o Datoteka instance. Pogledajmo kako koristiti getName, getParentFile, i getPath metode:

@Test javna praznina givenFile_whenCreateNewFile_thenMetadataIsCorrect () {Niz sep = File.separator; Datoteka parentDir = makeDir ("filesDir"); Datoteka child = nova datoteka (parentDir, "file.txt"); isprobajte {child.createNewFile (); } catch (IOException e) {fail ("Nije moguće stvoriti" + "file.txt"); } assertEquals ("file.txt", child.getName ()); assertEquals (parentDir.getName (), child.getParentFile (). getName ()); assertEquals (parentDir.getPath () + sep + "file.txt", child.getPath ()); removeDir (parentDir); }

Ovdje smo ilustrirali provjeru valjanosti metapodataka o datoteci koja je stvorena unutar direktorija. Također smo pokazali kako pronaći roditelja datoteke i relativni put do te datoteke.

3.3. Postavljanje dozvola za datoteke i imenike

The Datoteka class ima metode koje vam omogućuju postavljanje dozvola za datoteku ili direktorij. Ovdje ćemo pogledati setWritable i setReadablemetode:

@Test javna praznina givenReadOnlyFile_whenCreateNewFile_thenCantModFile () {Datoteka parentDir = makeDir ("readDir"); Datoteka child = nova datoteka (parentDir, "file.txt"); isprobajte {child.createNewFile (); } catch (IOException e) {fail ("Nije moguće stvoriti" + "file.txt"); } child.setWritable (false); logička vrijednost za zapis = true; pokušajte (FileOutputStream fos = novi FileOutputStream (dijete)) {fos.write ("Pozdrav svijetu" .getBytes ()); // operacija pisanja fos.flush (); } catch (IOException e) {writable = false; } napokon {removeDir (parentDir); } assertFalse (za pisanje); }

U gornjem kodu pokušavamo pisati u datoteku nakon što joj izričito postavimo dozvole koje blokiraju svako upisivanje. To radimo s setWritable metoda. Pokušaj pisanja u datoteku prilikom pisanja u datoteku nije dopušten rezultira a IOException biti bačen.

Dalje, pokušavamo čitati iz datoteke nakon što joj postavimo dopuštenja koja blokiraju čitanje. Čitanja se blokiraju pomoću setReadable metoda:

@Test javna praznina givenWriteOnlyFile_whenCreateNewFile_thenCantReadFile () {Datoteka parentDir = makeDir ("writeDir"); Datoteka child = nova datoteka (parentDir, "file.txt"); isprobajte {child.createNewFile (); } catch (IOException e) {fail ("Nije moguće stvoriti" + "file.txt"); } child.setReadable (false); logička čitljivost = istina; probajte (FileInputStream fis = novi FileInputStream (dijete)) {fis.read (); // operacija čitanja} catch (IOException e) {readable = false; } napokon {removeDir (parentDir); } assertFalse (čitljivo); }

Opet, JVM će baciti a IOException za pokušaje čitanja datoteke u kojoj čitanje nije dopušteno.

3.4. Popis datoteka unutar direktorija

The Datoteka class ima metode koje nam omogućuju popis datoteka sadržanih u direktoriju. Slično tome, mogu se navesti i direktoriji. Ovdje ćemo pogledati popis i popis (FilenameFilter) metode:

@Test javna praznina givenFilesInDir_whenCreateNewFile_thenCanListFiles () {Datoteka parentDir = makeDir ("filtersDir"); Niz [] files = {"file1.csv", "file2.txt"}; for (String file: files) {try {new File (nadimak, datoteka) .createNewFile (); } catch (IOException e) {fail ("Nije moguće stvoriti" + datoteka); }} // normalni popis assertEquals (2, parentDir.list (). length); // filtrirani popis FilenameFilter csvFilter = (dir, ext) -> ext.endsWith (". csv"); assertEquals (1, parentDir.list (csvFilter) .length); removeDir (parentDir); }

Stvorili smo direktorij i dodali smo mu dvije datoteke - jednu s a csv produžetak, a drugi s a txt produženje. Kada navodimo sve datoteke u direktoriju, dobivamo dvije datoteke kako se očekivalo. Kada filtriramo popis filtrirajući oko datoteka pomoću csv proširenje, dobit ćemo samo jednu datoteku.

3.5. Preimenovanje datoteka i direktorija

The Datoteka klasa ima funkciju preimenovanja datoteka i direktorija koristiti preimenovati u metoda:

@Test javna praznina givenDir_whenMkdir_thenCanRenameDir () {Izvor datoteke = makeDir ("izvor"); Datoteka odredište = makeDir ("odredište"); boolean preimenovan = source.renameTo (odredište); ako (preimenovano) {assertFalse (source.isDirectory ()); assertTrue (destination.isDirectory ()); removeDir (odredište); }}

U gornjem primjeru kreiramo dva direktorija - izvorni i odredišni. Mi tada preimenujte izvorni direktorij u odredišni direktorij pomoću preimenovati u metoda. Iste se mogu koristiti za preimenovanje datoteka umjesto u direktorije.

3.6. Dobivanje podataka o prostoru na disku

The Datoteka klasa također nam omogućuje dobivanje podataka o prostoru na disku. Da vidimo a demonstracija getFreeSpace metoda:

@Test javna praznina givenDataWritten_whenWrite_thenFreeSpaceReduces () {Niz home = System.getProperty ("user.home"); Niz sep = File.separator; Datoteka testDir = makeDir (home + sep + "test"); Uzorak datoteke = nova datoteka (testDir, "sample.txt"); long freeSpaceBefore = testDir.getFreeSpace (); pokušajte {writeSampleDataToFile (uzorak); } catch (IOException e) {fail ("Ne mogu zapisati u" + "sample.txt"); } long freeSpaceAfter = testDir.getFreeSpace (); assertTrue (freeSpaceAfter <freeSpaceBefore); removeDir (testDir); }

U ovom smo primjeru stvorili direktorij unutar korisnikovog kućnog direktorija, a zatim u njemu stvorili datoteku. Zatim smo provjerili je li se promijenio slobodni prostor na particiji kućnog direktorija nakon što je ovu datoteku popunio nekim tekstom. Ostale metode koje daju informacije o prostoru na disku su getTotalSpace i getUsableSpace.

4. Zaključak

U ovom uputstvu pokazali smo neke od funkcionalnosti Datoteka klasa omogućuje rad s datotekama i direktorijima na datotečnom sustavu. .

Kao i uvijek, puni izvorni kod primjera dostupan je na Githubu.