1. Filesosztály

Fájlok osztály

A fájlokkal való munkavégzéshez van egy sima segédprogram osztály – java.nio.file.Files. Minden alkalomra vannak módszerei. Ennek az osztálynak az összes metódusa statikus, és a Path objektumon működik. Nagyon sok módszer létezik, ezért csak a legfontosabbakat vesszük figyelembe:

Módszer Leírás
Path createFile(Path path)
Létrehoz egy új fájlt, amelynek elérési útja apath
Path createDirectory(Path path)
Új könyvtárat hoz létre
Path createDirectories(Path path)
Több könyvtárat hoz létre
Path createTempFile(prefix, suffix)
Létrehoz egy ideiglenes fájlt
Path createTempDirectory(prefix)
Létrehoz egy ideiglenes könyvtárat
void delete(Path path)
Töröl egy fájlt vagy könyvtárat, ha az üres
Path copy(Path src, Path dest)
Fájlokat másol
Path move(Path src, Path dest)
Fájl áthelyezése
boolean isDirectory(Path path)
Ellenőrzi, hogy az elérési út egy könyvtár és nem egy fájl
boolean isRegularFile(Path path)
Ellenőrzi, hogy az elérési út fájl-e és nem könyvtár
boolean exists(Path path)
Ellenőrzi, hogy létezik-e objektum az adott útvonalon
long size(Path path)
Visszaadja a fájl méretét
byte[] readAllBytes(Path path)
Egy fájl teljes tartalmát adja vissza bájtok tömbjeként
String readString(Path path)
A fájl teljes tartalmát karakterláncként adja vissza
List<String> readAllLines(Path path)
A fájl teljes tartalmát karakterláncok listájaként adja vissza
Path write(Path path, byte[])
Egy bájttömböt ír egy fájlba
Path writeString(Path path, String str)
Karakterláncot ír egy fájlba
DirectoryStream<Path> newDirectoryStream(Path dir)
Fájlok (és alkönyvtárak) gyűjteményét adja vissza az adott könyvtárból

2. Fájlok és könyvtárak létrehozása

A fájlok és könyvtárak létrehozása nagyon egyszerű. Győzzük meg magunkat néhány példával:

Kód jegyzet
Files.createFile(Path.of("c:\\readme.txt"));
Létrehoz egy fájlt
Files.createDirectory(Path.of("c:\\test"));
Létrehoz egy könyvtárat
Files.createDirectories(Path.of("c:\\test\\1\\2\\3"));
Létrehoz egy könyvtárat és az összes szükséges alkönyvtárat, ha nem létezik.

3. Másolás, áthelyezés és törlés

A fájlok másolása, áthelyezése és törlése ugyanolyan egyszerű. Ez vonatkozik a könyvtárakra is, de ezeknek üresnek kell lenniük.

Kód jegyzet
Path path1 = Path.of("c:\\readme.txt");
Path path2 = Path.of("c:\\readme-copy.txt");
Files.copy(path1, path2);
Fájlokat másol
Path path1 = Path.of("c:\\readme.txt");
Path path2 = Path.of("d:\\readme-new.txt");
Files.move(path1, path2);
Fájl áthelyezése és átnevezése
Path path = Path.of("d:\\readme-new.txt");
Files.delete(path);
Töröl egy fájlt

4. Fájl típusának és létezésének ellenőrzése

Ha valaki mástól kapott elérési utat, akkor tudnia kell, hogy az egy fájl vagy egy könyvtár. És általában létezik ilyen fájl/könyvtár vagy nincs?

Erre is vannak speciális módszerek. Könnyen megtudhatja a fájl hosszát is:

Kód jegyzet
Files.isRegularFile(Path.of("c:\\readme.txt"));
true
Files.isDirectory(Path.of("c:\\test"));
true
 Files.exists(Path.of("c:\\test\\1\\2\\3"));
false
Files.size(Path.of("c:\\readme.txt"));
10112

5. Munka a fájl tartalmával

Végezetül egy sor módszer létezik, amelyek megkönnyítik egy fájl tartalmának olvasását vagy írását. Példa:

Kód Leírás
Path path = Path.of("c:\\readme.txt");
List<String> list = Files.readAllLines(path);

for (String str : list)
   System.out.println(str);

Olvassa el a fájl tartalmát karakterláncok listájaként.

Jelenítse meg a karakterláncokat


6. Egy könyvtár tartalmának lekérése

A legérdekesebb módszer továbbra is megmaradt. Egy adott könyvtárban lévő fájlok és alkönyvtárak lekérésére szolgál.

Arról a metódusról beszélünk newDirectoryStream(), amely egy speciális DirectoryStream<Path>objektumot ad vissza. Van egy iterátora(!), amivel egy adott könyvtár összes fájlját és alkönyvtárát lekérhetjük.

Ez könnyebb, mint amilyennek hangzik.

Kód Leírás
Path path = Path.of("c:\\windows");

try (DirectoryStream<Path> files = Files.newDirectoryStream(path)) {
   for (Path path : files)
      System.out.println(path);
}


Fájllistával rendelkező objektum beszerzése
Ugorjon át a fájlok listáján

Az DirectoryStream<Path>objektumnak két tulajdonsága van. Először is van egy iterátora, amely visszaadja a fájl elérési útját, és ezt az objektumot egy cikluson belül használhatjuk for-each.

Másodszor, ez az objektum egy adatfolyam, tehát kifejezetten be kell zárni a metódussal , vagy deklaráltan kell használni egy blokkon close()belül .try-with-resources



7. Files.newInputStreammódszer

A Java 5-től kezdve a FileInputStreamés FileOutputStreamosztályok elavultak. Egyik hátrányuk az volt, hogy amikor ezeknek az osztályoknak az objektumait létrehozzák, a fájlok azonnal létrejönnek a lemezen. És a fájllétrehozással kapcsolatos összes kivételt ki lehet dobni.

Később felismerték, hogy ez nem a legjobb döntés. java.nio.FilesEnnek megfelelően a fájlobjektumok létrehozásához javasolt a segédprogram osztály metódusait használni .

Íme egy összehasonlítás a fájlok létrehozásának régi és új megközelítése között:

Előtt
String src = "c:\\projects\\log.txt";
InputStream input = new FileInputStream(src);
Után
String src = "c:\\projects\\log.txt";
InputStream input = Files.newInputStream( Path.of(src) );

És van egy hasonló helyettesítő FileOutputStream:

Előtt
String src = "c:\\projects\\log.txt";
OutputStream  output = new FileOutputStream( src );
Után
String src = "c:\\projects\\log.txt";
OutputStream  output = Files.newOutputStream( Path.of( src ) );