Java datoteke Otvorene opcije

1. Pregled

U ovom uputstvu usredotočit ćemo se na standardne otvorene opcije dostupne za datoteke na Javi.

Istražit ćemo StandardOpenOption enum koji implementira OpenOption sučelje i to definira ove standardne otvorene opcije.

2. The OpenOption Parametar

U Javi možemo raditi s datotekama koristeći NIO2 API koji sadrži nekoliko korisnih metoda. Neke od ovih metoda koriste se po izboru OpenOption parametar koji konfigurira način otvaranja ili stvaranja datoteke. Uz to, ovaj će parametar imati zadanu vrijednost ako nije postavljen, a koja se može razlikovati za svaku od ovih metoda.

The StandardOpenOption enum tip definira standardne opcije i implementira OpenOption sučelje.

Evo popisa podržanih opcija koje možemo koristiti s StandardOpenOptions nabrajanje:

  • PISATI: otvara datoteku za pristup pisanju
  • DODATI: dodaje neke podatke u datoteku
  • TRUNCATE_EXISTING: skraćuje datoteku
  • CREATE_NEW: stvara novu datoteku i baca iznimku ako datoteka već postoji
  • STVORITI: otvara datoteku ako postoji ili stvara novu datoteku ako ne postoji
  • DELETE_ON_CLOSE: briše datoteku nakon zatvaranja streama
  • PROSJEDNA: novostvorena datoteka bit će rijetka
  • SINHOR: čuva sinkronizirani sadržaj i metapodatke datoteke
  • DSYNC: čuva samo sinkronizirani sadržaj datoteke

U sljedećim odjeljcima vidjet ćemo primjere kako koristiti svaku od ovih opcija.

Da izbjegnemo zabunu na putu do datoteke, uzmimo ručicu u kućnom direktoriju korisnika, koja će vrijediti u svim operativnim sustavima:

privatni statički niz HOME = System.getProperty ("user.home");

3. Otvaranje datoteke za čitanje i pisanje

Prvo, ako želimo da bismo stvorili novu datoteku ako ne postoji, možemo koristiti opciju STVORITI:

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

Možemo također koristiti opciju CREATE_NEW, koja će stvoriti novu datoteku ako ne postoji.Međutim, izbacit će iznimku ako datoteka već postoji.

Drugo, ako želimo za otvaranje datoteke za čitanje možemo koristiti newInputStream (Put, OpenOption...) metoda. Ova metoda otvara datoteku za čitanje i vraća ulazni tok:

@Test javna praznina givenExistingPath_whenReadExistingFile_thenCorrect () baca IOException {Put puta = Paths.get (HOME, DUMMY_FILE_NAME); probajte (InputStream u = Files.newInputStream (put); čitač BufferedReader = novi BufferedReader (novi InputStreamReader (u))) {Redak niza; while ((line = reader.readLine ())! = null) {assertThat (line, CoreMatchers.containsString (DUMMY_TEXT)); }}} 

Primijetite kako nismo koristili opciju ČITATI jer se metoda koristi prema zadanim postavkama newInputStream.

Treći, možemo stvoriti datoteku, dodati je u datoteku ili zapisati u datoteku pomoću newOutputStream (Put, OpenOption...) metoda. Ova metoda otvara ili stvara datoteku za pisanje i vraća datoteku Izlazni tok.

API će stvoriti novu datoteku ako ne odredimo otvorene opcije, a datoteka ne postoji. Međutim, ako datoteka postoji, bit će skraćena. Ova je opcija slična pozivanju metode pomoću STVORITI i TRUNCATE_EXISTING mogućnosti.

Otvorimo postojeću datoteku i dodamo neke podatke:

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

4. Stvaranje a PROSJEDNA Datoteka

Datotečnom sustavu možemo reći da novostvorena datoteka treba biti rijetka (datoteke koje sadrže prazne prostore koji se neće zapisati na disk).

Za to bismo trebali koristiti opciju PROSJEDNA s CREATE_NEW opcija. Međutim, ova će se opcija zanemariti ako datotečni sustav ne podržava rijetke datoteke.

Stvorimo rijetku datoteku:

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

5. Održavanje sinkronizacije datoteke

The StandardOpenOptions enum ima SINHOR i DSYNC mogućnosti. Ove opcije zahtijevaju da se podaci sinkronizirano zapisuju u datoteku u pohranu. Drugim riječima, oni će jamčiti da se podaci neće izgubiti u slučaju pada sustava.

Dodamo neke podatke našoj datoteci i upotrijebimo opciju SINHOR:

@Test javna praznina givenExistingPath_whenWriteAndSync_thenCorrect () baca IOException {Put puta = Paths.get (HOME, DUMMY_FILE_NAME); Files.write (put, ANOTHER_DUMMY_TEXT.getBytes (), StandardOpenOption.APPEND, StandardOpenOption.WRITE, StandardOpenOption.SYNC); }

Razlika između SINHOR i DSYNC je li to SINHORsinkrono pohranjuje sadržaj i metapodatke datoteke u spremištu, dok DSYNC sinkrono pohranjuje samo sadržaj datoteke u spremištu.

6. Brisanje datoteke nakon zatvaranja streama

The StandardOpenOptions enum također nudi korisnu opciju koja nam daje mogućnost uništavanja datoteke nakon zatvaranja streama. Ovo je korisno ako želimo stvoriti privremenu datoteku.

Dodamo neke podatke našoj datoteci i koristite opciju DELETE_ON_CLOSE:

@Test javna praznina givenExistingPath_whenDeleteOnClose_thenCorrect () baca IOException {Path path = Paths.get (HOME, EXISTING_FILE_NAME); assertTrue (Files.exists (path)); // datoteka je već stvorena i postoji pokušajte (OutputStream out = Files.newOutputStream (put, StandardOpenOption.APPEND, StandardOpenOption.WRITE, StandardOpenOption.DELETE_ON_CLOSE)) {out.write (ANOTHER_DUMMY_TEXT.getBytes ()); } assertFalse (Files.exists (path)); // datoteka je izbrisana}

7. Zaključak

U ovom smo priručniku pokrili dostupne mogućnosti za otvaranje datoteka na Javi pomoću novog API-ja datotečnog sustava (NIO2) koji je isporučen kao dio Jave 7.

Kao i obično, izvorni kod sa svim primjerima iz vodiča možete pronaći na Githubu.


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