Možnosti otvorenia súborov Java

1. Prehľad

V tomto tutoriáli sa zameriame na štandardné možnosti otvorenia dostupné pre súbory v Jave.

Preskúmame StandardOpenOption enum, ktorý implementuje OpenOption ktoré definuje tieto štandardné otvorené možnosti.

2. The OpenOption Parameter

V Jave môžeme so súbormi pracovať pomocou NIO2 API, ktoré obsahuje niekoľko úžitkových metód. Niektoré z týchto spôsobov používajú voliteľné OpenOption parameter, ktorý konfiguruje spôsob otvorenia alebo vytvorenia súboru. Ak tento parameter nie je nastavený, bude mať navyše predvolenú hodnotu, ktorá sa môže pre každú z týchto metód líšiť.

The StandardOpenOption typ enum definuje štandardné možnosti a implementuje OpenOption rozhranie.

Tu je zoznam podporovaných možností, ktoré môžeme použiť s StandardOpenOptions enum:

  • NAPÍŠTE: otvorí súbor pre prístup na zápis
  • PRIPOJIŤ: pripojí k súboru nejaké údaje
  • TRUNCATE_EXISTING: skráti súbor
  • VYTVOR NOVÝ: vytvorí nový súbor a vyvolá výnimku, ak už súbor existuje
  • VYTVORIŤ: otvorí súbor, ak existuje, alebo vytvorí nový, ak nie
  • DELETE_ON_CLOSE: vymaže súbor po zatvorení streamu
  • RIEŠIŤ: novovytvorený súbor bude riedky
  • SYNC: zachová synchronizovaný obsah a metadáta súboru
  • DSYNC: zachová sa synchronizovaný iba obsah súboru

V ďalších častiach uvidíme príklady toho, ako využiť každú z týchto možností.

Aby sme predišli nejasnostiam v ceste k súboru, poďme si poradiť s domovským adresárom používateľa, ktorý bude platiť vo všetkých operačných systémoch:

private static String HOME = System.getProperty ("user.home");

3. Otvorenie súboru na čítanie a zápis

Najprv, ak chceme na vytvorenie nového súboru, ak neexistuje, môžeme použiť voľbu VYTVORIŤ:

@ Test public void givenExistingPath_whenCreateNewFile_thenCorrect () hodí IOException {assertFalse (Files.exists (Paths.get (HOME, "newfile.txt"))); Files.write (cesta, DUMMY_TEXT.getBytes (), StandardOpenOption.CREATE); assertTrue (Files.exists (cesta)); }

Môžeme tiež použiť túto možnosť VYTVOR NOVÝ, ktorý vytvorí nový súbor, ak neexistuje.Ak súbor už existuje, spôsobí však výnimku.

Po druhé, ak chceme na otvorenie súboru na čítanie môžeme použiť newInputStream (cesta, OpenOption...) metóda. Táto metóda otvorí súbor na čítanie a vráti vstupný prúd:

@Test public void givenExistingPath_whenReadExistingFile_thenCorrect () hodí IOException {Path path = Paths.get (HOME, DUMMY_FILE_NAME); try (InputStream in = Files.newInputStream (path); BufferedReader reader = new BufferedReader (new InputStreamReader (in)))) {String line; while ((line = reader.readLine ())! = null) {assertThat (line, CoreMatchers.containsString (DUMMY_TEXT)); }}} 

Všimnite si ako túto možnosť sme nevyužili ČÍTAŤ pretože sa štandardne používa touto metódou newInputStream.

Po tretie, môžeme vytvoriť súbor, pripojiť ho k súboru alebo doň zapísať pomocou súboru newOutputStream (cesta, OpenOption...) metóda. Táto metóda otvorí alebo vytvorí súbor na zápis a vráti znak OutputStream.

Ak neurčíme možnosti otvorenia, API vytvorí nový súbor a súbor neexistuje. Ak však súbor existuje, bude orezaný. Táto možnosť je podobná volaniu metódy pomocou VYTVORIŤ a TRUNCATE_EXISTING možnosti.

Otvorme existujúci súbor a pripojme niektoré údaje:

@ Test public void givenExistingPath_whenWriteToExistingFile_thenCorrect () vyvolá IOException {Path path = Paths.get (HOME, DUMMY_FILE_NAME); try (OutputStream out = Files.newOutputStream (cesta, StandardOpenOption.APPEND, StandardOpenOption.WRITE)) {out.write (ANOTHER_DUMMY_TEXT.getBytes ()); }}

4. Vytvorenie a RIEŠIŤ Súbor

Môžeme povedať súborovému systému, že novovytvorený súbor by mal byť riedky (súbory obsahujúce prázdne medzery, ktoré sa nezapíšu na disk).

Na tento účel by sme mali využiť túto možnosť RIEŠIŤ s VYTVOR NOVÝ možnosť. Avšak táto voľba bude ignorovaná, ak súborový systém nepodporuje riedke súbory.

Vytvorme riedky súbor:

@ Test public void givenExistingPath_whenCreateSparseFile_thenCorrect () vyvolá IOException {Path path = Paths.get (HOME, "sparse.txt"); Files.write (cesta, DUMMY_TEXT.getBytes (), StandardOpenOption.CREATE_NEW, StandardOpenOption.SPARSE); }

5. Udržiavanie synchronizovaného súboru

The StandardOpenOptions enum má SYNC a DSYNC možnosti. Tieto možnosti vyžadujú, aby sa dáta do súboru zapisovali synchrónne v úložisku. Inými slovami, tieto zaručia, že sa údaje v prípade zlyhania systému nestratia.

Pripojme niektoré údaje k nášmu súboru a využime túto možnosť SYNC:

@Test public void givenExistingPath_whenWriteAndSync_thenCorrect () hodí IOException {Path path = Paths.get (HOME, DUMMY_FILE_NAME); Files.write (cesta, ANOTHER_DUMMY_TEXT.getBytes (), StandardOpenOption.APPEND, StandardOpenOption.WRITE, StandardOpenOption.SYNC); }

Rozdiel medzi SYNC a DSYNC je to tak SYNCukladá obsah a metaúdaje súboru synchronne v úložisku, zatiaľ čo DSYNC synchronizuje iba obsah súboru v sklade.

6. Vymazanie súboru po ukončení vysielania

The StandardOpenOptions enum tiež ponúka užitočnú možnosť, ktorá nám dáva možnosť zničiť súbor po uzavretí streamu. Je to užitočné, ak chceme vytvoriť dočasný súbor.

Pripojme niektoré údaje k nášmu súboru a využite túto možnosť DELETE_ON_CLOSE:

@Test public void givenExistingPath_whenDeleteOnClose_thenCorrect () hodí IOException {Path path = Paths.get (HOME, EXISTING_FILE_NAME); assertTrue (Files.exists (cesta)); // súbor už bol vytvorený a existuje try (OutputStream out = Files.newOutputStream (cesta, StandardOpenOption.APPEND, StandardOpenOption.WRITE, StandardOpenOption.DELETE_ON_CLOSE)) {out.write (ANOTHER_DUMMY_TEXT.getBytes ()); } assertFalse (Files.exists (cesta)); // súbor je odstránený}

7. Záver

V tomto tutoriáli sme sa venovali dostupným možnostiam otvárania súborov v Jave pomocou nového API systému súborov (NIO2), ktoré bolo dodané ako súčasť Java 7.

Ako obvykle, zdrojový kód so všetkými príkladmi v tomto výučbe nájdete na Githube.


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