Java fájl osztály

1. Áttekintés

Ebben az oktatóanyagban áttekintést adunk a File osztály, amely a java.io API. A File osztály lehetővé teszi számunkra, hogy a fájlrendszeren található fájlokkal és könyvtárakkal dolgozzunk.

2. A. Létrehozása File Tárgy

A File osztályban 4 nyilvános kivitelező működik. A fejlesztő igényeitől függően a File osztály hozható létre.

  • Fájl (karakterlánc elérési útja) - Létrehoz egy példányt, amely az adott képviseli elérési út
  • Fájl (karakterlánc szülő, karakterlánc gyermek) - Létrehoz egy példányt, amely képviseli a szülő és a gyermek utak
  • Fájl (File szülő, String gyermek) - Létrehoz egy példányt azzal az útvonallal, amelyet a szülő egy másik által képviselt út File példány és a gyermek pálya
  • Fájl (URI uri) - Létrehoz egy példányt, amely a megadott egységes erőforrás-azonosítót képviseli

3. Munka a File Osztály

A File osztály számos módszerrel rendelkezik, amelyek lehetővé teszik számunkra, hogy a fájlrendszer fájljaival dolgozzunk és manipuláljuk őket. Néhányat közülük itt emelünk ki. Fontos megjegyezni, hogy a File osztály nem tudja módosítani vagy elérni az általa képviselt fájl tartalmát.

3.1. Könyvtárak és fájlok létrehozása és törlése

A File osztály rendelkezik példány módszerekkel könyvtárak és fájlok létrehozására és törlésére. A könyvtárak és fájlok segítségével hozta létre mkdir és createNewFile módill.

A könyvtárak és fájlok törlése a töröl módszer. Mindezek a módszerek a logikai az az érték igaz amikor a művelet sikeres lesz, és hamis másképp:

@Test public void givenDir_whenMkdir_thenDirIsDeleted () {File directory = new File ("dir"); assertTrue (könyvtár.mkdir ()); assertTrue (directory.delete ()); } @Test public void givenFile_whenCreateNewFile_thenFileIsDeleted () {File file = new File ("file.txt"); próbáld ki az {assertTrue (file.createNewFile ()) parancsot; } catch (IOException e) {fail ("Nem sikerült létrehozni a" + "file.txt fájlt"); } assertTrue (file.delete ()); }

A fenti részletben azt is látjuk egyéb hasznos módszerek.

A isDirectory módszer használható annak tesztelésére, hogy a megadott névvel jelölt fájl könyvtár-e, míg a a isFile módszer használható annak tesztelésére, hogy a megadott névvel jelölt fájl fájl-e. És használhatjuk a létezik módszer annak tesztelésére, hogy létezik-e már könyvtár vagy fájl a rendszeren.

3.2. Metaadatok megismerése a fájlpéldányokról

A File osztálynak számos módszere van, amelyek metaadatokat adnak vissza File példányok. Lássuk, hogyan kell használni a getName, getParentFile, és getPath mód:

@Test public void givenFile_whenCreateNewFile_thenMetadataIsCorrect () {String sep = File.separator; Fájl parentDir = makeDir ("filesDir"); File child = új File (parentDir, "file.txt"); próbáld ki a {child.createNewFile (); } catch (IOException e) {fail ("Nem sikerült létrehozni a" + "file.txt fájlt"); } assertEquals ("file.txt", gyermek.getName ()); assertEquals (parentDir.getName (), child.getParentFile (). getName ()); assertEquals (parentDir.getPath () + szep + "file.txt", child.getPath ()); removeDir (parentDir); }

Itt szemléltettük a könyvtárban létrehozott fájl metaadatainak érvényesítését. Megmutattuk azt is, hogyan lehet megtalálni a fájl szülőjét és a fájl relatív elérési útját.

3.3. Fájl- és könyvtárengedélyek beállítása

A File osztály rendelkezik olyan módszerekkel, amelyek lehetővé teszik egy fájl vagy könyvtár engedélyeinek beállítását. Itt megnézzük a setWritable és setReadablemód:

@Test public void givenReadOnlyFile_whenCreateNewFile_thenCantModFile () {File parentDir = makeDir ("readDir"); File child = új File (parentDir, "file.txt"); próbáld ki a {child.createNewFile (); } catch (IOException e) {fail ("Nem sikerült létrehozni a" + "file.txt fájlt"); } child.setWritable (hamis); logikai írható = igaz; try (FileOutputStream fos = new FileOutputStream (gyermek)) {fos.write ("Hello World" .getBytes ()); // írási művelet fos.flush (); } catch (IOException e) {írható = hamis; } végül {removeDir (parentDir); } assertFalse (írható); }

A fenti kódban megpróbálunk írni egy fájlba, miután kifejezetten engedélyeket állítottunk be rá, amelyek blokkolnak minden írást. Ezt a setWritable módszer. A fájlba történő írás megkísérlése a fájlba történő íráskor nem megengedett IOException dobják.

Ezután megpróbálunk olvasni egy fájlból, miután engedélyeket állítottunk be rá, amely blokkolja az olvasásokat. Az olvasásokat a setReadable módszer:

@Test public void givenWriteOnlyFile_whenCreateNewFile_thenCantReadFile () {File parentDir = makeDir ("writeDir"); File child = új File (parentDir, "file.txt"); próbáld ki a {child.createNewFile (); } catch (IOException e) {fail ("Nem sikerült létrehozni a" + "file.txt fájlt"); } child.setReadable (hamis); logikai olvasható = true; try (FileInputStream fis = új FileInputStream (gyermek)) {fis.read (); // művelet olvasása} catch (IOException e) {readable = false; } végül {removeDir (parentDir); } assertFalse (olvasható); }

Újra, a JVM dob egy IOException olyan fájl olvasási kísérleteire, ahol az olvasás nem megengedett.

3.4. Fájlok listázása egy könyvtárban

A File osztálynak vannak olyan módszerei, amelyek lehetővé teszik számunkra a könyvtárban található fájlok felsorolását. Hasonlóképpen a könyvtárak is felsorolhatók. Itt megnézzük a lista és lista (FilenameFilter) mód:

@Test public void givenFilesInDir_whenCreateNewFile_thenCanListFiles () {File parentDir = makeDir ("filtersDir"); Karakterlánc [] fájlok = {"file1.csv", "file2.txt"}; for (Karakterláncfájl: fájlok) {próbálkozzon {új Fájl (parentDir, fájl) .createNewFile (); } catch (IOException e) {fail ("Nem sikerült létrehozni" + fájl); }} // normál listázási assertEquals (2, parentDir.list (). hossz); // szűrt lista FilenameFilter csvFilter = (dir, ext) -> ext.endsWith (". csv"); assertEquals (1, parentDir.list (csvFilter) .length); removeDir (parentDir); }

Hoztunk létre egy könyvtárat, és két fájlt adtunk hozzá - az egyiket a-val csv kiterjesztés, a másik pedig a txt kiterjesztés. A könyvtár összes fájljának felsorolásakor két fájlt kapunk a várakozásoknak megfelelően. Amikor a listát szűrjük a fájlok körüli szűréssel az a-val csv kiterjesztés esetén csak egy fájlt kapunk vissza.

3.5. Fájlok és könyvtárak átnevezése

A File osztály rendelkezik a fájlok és könyvtárak átnevezésének funkciójával használni a átnevezniTo módszer:

@Test public void givenDir_whenMkdir_thenCanRenameDir () {File source = makeDir ("source"); Fájl cél = makeDir ("cél"); logikai átnevezve = source.renameTo (cél); if (átnevezve) {assertFalse (forrás.isDirectory ()); assertTrue (destination.isDirectory ()); removeDir (cél); }}

A fenti példában két könyvtárat hozunk létre - a forrás és a cél könyvtárakat. Mi akkor nevezze át a forrás könyvtárat célkönyvtárra a átnevezniTo módszer. Ugyanez használható fájlok átnevezésére könyvtárak helyett.

3.6. Információk a lemezterületről

A File osztály azt is lehetővé teszi számunkra, hogy információkat szerezzünk a lemezterületről. Lássuk a bemutatása getFreeSpace módszer:

@Test public void givenDataWritten_whenWrite_thenFreeSpaceReduces () {String home = System.getProperty ("user.home"); String sep = Fájl.elválasztó; Fájl testDir = makeDir (home + sep + "test"); Fájlminta = új Fájl (testDir, "minta.txt"); hosszú freeSpaceBefore = testDir.getFreeSpace (); próbáld ki a {writeSampleDataToFile (minta); } catch (IOException e) {fail ("Nem sikerült írni a" + "sample.txt fájlba); } long freeSpaceAfter = testDir.getFreeSpace (); assertTrue (freeSpaceAfter <freeSpaceBefore); removeDir (testDir); }

Ebben a példában létrehoztunk egy könyvtárat a felhasználó saját könyvtárában, majd létrehoztunk benne egy fájlt. Ezután ellenőriztük, hogy a házkönyvtár partíció szabad helye megváltozott-e, miután ezt a fájlt némi szöveggel feltöltötte. A lemezterületről információt nyújtó egyéb módszerek a következők getTotalSpace és getUsableSpace.

4. Következtetés

Ebben az oktatóanyagban bemutattuk a funkciók egy részét File osztály biztosítja a fájlokkal és könyvtárakkal való munkát a fájlrendszeren. .

Mint mindig, a példa teljes forráskódja elérhető a Githubon.