Java Files Nyissa meg az Opciókat

1. Áttekintés

Ebben az oktatóanyagban a Java fájlok elérhető szabványos megnyitási lehetőségeire fogunk összpontosítani.

Felfedezzük a StandardOpenOption enum, amely végrehajtja a OpenOption interfész, és ez meghatározza ezeket a szabványos nyitott opciókat.

2. A OpenOption Paraméter

A Java-ban a NIO2 API segítségével dolgozhatunk fájlokkal, amely számos segédprogram-módszert tartalmaz. Ezen módszerek némelyike ​​választható OpenOption paraméter, amely konfigurálja a fájl megnyitását vagy létrehozását. Ezenkívül ennek a paraméternek lesz alapértelmezett értéke, ha nincs megadva, amely az egyes módszereknél eltérő lehet.

A StandardOpenOption Az enum típus meghatározza a standard opciókat és végrehajtja a OpenOption felület.

Itt található a támogatott opciók listája, amelyeket a StandardOpenOptions enum:

  • ÍR: megnyitja a fájlt írási hozzáférés céljából
  • MELLÉKEL: csatol néhány adatot a fájlhoz
  • TRUNCATE_EXISTING: csonkolja a fájlt
  • ÚJAT KÉSZÍTENI: létrehoz egy új fájlt, és kivételt dob, ha a fájl már létezik
  • TEREMT: megnyitja a fájlt, ha létezik, vagy új fájlt hoz létre, ha nem
  • DELETE_ON_CLOSE: törli a fájlt az adatfolyam bezárása után
  • RITKA: az újonnan létrehozott fájl ritka lesz
  • SZINKRONIZÁL: megőrzi a fájl tartalmát és metaadatait szinkronizálva
  • DSYNC: csak a szinkronizált fájl tartalmát őrzi meg

A következő szakaszokban példákat láthatunk az egyes lehetőségek használatára.

A fájlelérési zavarok elkerülése érdekében nyerjünk egy kezelési lehetőséget a felhasználó saját könyvtárában, amely minden operációs rendszerre érvényes lesz:

privát statikus karakterlánc HOME = System.getProperty ("user.home");

3. Fájl megnyitása olvasáshoz és íráshoz

Először is, ha akarjuk új fájl létrehozásához, ha még nem létezik, használhatjuk az opciót TEREMT:

@Test public void givenExistingPath_whenCreateNewFile_thenCorrect () dobja az IOException {assertFalse (Files.exists (Paths.get (HOME, "newfile.txt"))); Files.write (elérési út, DUMMY_TEXT.getBytes (), StandardOpenOption.CREATE); assertTrue (Fájlok.létezik (elérési út)); }

Használhatjuk az opciót is ÚJAT KÉSZÍTENI, amely létrehoz egy új fájlt, ha nem létezik.Kivételt hoz azonban, ha a fájl már létezik.

Másodszor, ha akarjuk a fájl megnyitásához olvasásra használhatjuk a newInputStream (elérési út, OpenOption...) módszer. Ez a módszer megnyitja a fájlt olvasásra, és visszaadja a bemeneti adatfolyamot:

@Test public void givenExistingPath_whenReadExistingFile_thenCorrect () dobja az IOException {Path path = Paths.get (HOME, DUMMY_FILE_NAME); try (InputStream in = Files.newInputStream (elérési út); BufferedReader olvasó = new BufferedReader (új InputStreamReader (in))) {String sor; while ((line = olvasó.readLine ())! = null) {assertThat (vonal, CoreMatchers.containsString (DUMMY_TEXT)); }}} 

Figyelje meg, hogyan nem használtuk az opciót OLVAS mert a módszer alapértelmezés szerint használja newInputStream.

Harmadik, létrehozhatunk egy fájlt, csatolhatunk egy fájlt, vagy írhatunk egy fájlba a newOutputStream (elérési út, OpenOption...) módszer. Ez a módszer megnyit vagy létrehoz egy fájlt az íráshoz, és egy OutputStream.

Az API új fájlt hoz létre, ha nem adjuk meg a megnyitási lehetőségeket, és a fájl nem létezik. Ha azonban a fájl létezik, akkor csonka lesz. Ez az opció hasonló a metódus meghívásához a TEREMT és TRUNCATE_EXISTING opciók.

Nyissunk meg egy meglévő fájlt, és csatoljunk néhány adatot:

@Test public void givenExistingPath_whenWriteToExistingFile_thenCorrect () dobja az IOException {Path path = Paths.get (HOME, DUMMY_FILE_NAME); try (OutputStream out = Files.newOutputStream (elérési út, StandardOpenOption.APPEND, StandardOpenOption.WRITE)) {out.write (ANOTHER_DUMMY_TEXT.getBytes ()); }}

4. A. Létrehozása RITKA File

Elmondhatjuk a fájlrendszernek, hogy az újonnan létrehozott fájlnak ritkának kell lennie (olyan fájlok, amelyek üres tereket tartalmaznak, amelyeket nem írnak lemezre).

Ehhez ki kell használnunk az opciót RITKA a ... val ÚJAT KÉSZÍTENI választási lehetőség. Azonban, ezt az opciót figyelmen kívül hagyjuk, ha a fájlrendszer nem támogatja a ritka fájlokat.

Hozzunk létre egy ritka fájlt:

@Test public void givenExistingPath_whenCreateSparseFile_thenCorrect () dobja az IOException {Path path = Paths.get (HOME, "sparse.txt"); Files.write (elérési út, DUMMY_TEXT.getBytes (), StandardOpenOption.CREATE_NEW, StandardOpenOption.SPARSE); }

5. A fájl szinkronizálása

A StandardOpenOptions enum van SZINKRONIZÁL és DSYNC opciók. Ezek az opciók megkövetelik, hogy az adatokat szinkron módon írják a fájlba a tárolóban. Más szavakkal, ezek garantálják, hogy az adatok nem vesznek el rendszerösszeomlás esetén.

Csatoljunk néhány adatot a fájlunkhoz, és használjuk az opciót SZINKRONIZÁL:

@Test public void givenExistingPath_whenWriteAndSync_thenCorrect () dobja az IOException {Path path = Paths.get (HOME, DUMMY_FILE_NAME); Files.write (elérési út, ANOTHER_DUMMY_TEXT.getBytes (), StandardOpenOption.APPEND, StandardOpenOption.WRITE, StandardOpenOption.SYNC); }

A különbség SZINKRONIZÁL és DSYNC az, hogy a SZINKRONIZÁLa fájl tartalmát és metaadatait szinkronban tárolja a tárolóban, míg DSYNC csak a fájl tartalmát tárolja szinkronban a tárolóban.

6. A fájl törlése az adatfolyam bezárása után

A StandardOpenOptions Az enum egy hasznos opciót is kínál, amely lehetővé teszi számunkra a fájl megsemmisítését az adatfolyam bezárása után. Ez akkor hasznos, ha ideiglenes fájlt akarunk létrehozni.

Csatoljunk néhány adatot a fájlunkba, és használja az opciót DELETE_ON_CLOSE:

@Test public void givenExistingPath_whenDeleteOnClose_thenCorrect () dobja az IOException {Path path = Paths.get (HOME, EXISTING_FILE_NAME); assertTrue (Fájlok.létezik (elérési út)); // a fájl már létrejött és létezik, próbálkozzon (OutputStream out = Files.newOutputStream (elérési út, StandardOpenOption.APPEND, StandardOpenOption.WRITE, StandardOpenOption.DELETE_ON_CLOSE)) {out.write (ANOTHER_DUMMY_TEXT.getBytes ()); } assertFalse (Fájlok.létezik (elérési út)); // fájl törölve}

7. Következtetés

Ebben az oktatóanyagban a Java fájlok megnyitásának lehetőségeit ismertettük a Java 7 részeként szállított új fájlrendszer API (NIO2) használatával.

Szokás szerint a forráskód és az oktatóanyag összes példája megtalálható a Githubon.