1. Filesclasa

Clasa de fișiere

Pentru a lucra cu fișiere, există o clasă de utilitare slick — java.nio.file.Files. Are metode pentru fiecare ocazie. Toate metodele acestei clase sunt statice și funcționează pe obiectul Path. Există o mulțime de metode, așa că le vom lua în considerare doar pe cele mai importante:

Metodă Descriere
Path createFile(Path path)
Creează un fișier nou a cărui cale estepath
Path createDirectory(Path path)
Creează un director nou
Path createDirectories(Path path)
Creează mai multe directoare
Path createTempFile(prefix, suffix)
Creează un fișier temporar
Path createTempDirectory(prefix)
Creează un director temporar
void delete(Path path)
Șterge un fișier sau un director dacă este gol
Path copy(Path src, Path dest)
Copiază un fișier
Path move(Path src, Path dest)
Mută ​​un fișier
boolean isDirectory(Path path)
Verifică dacă calea este un director și nu un fișier
boolean isRegularFile(Path path)
Verifică dacă calea este un fișier și nu un director
boolean exists(Path path)
Verifică dacă un obiect există pe calea dată
long size(Path path)
Returnează dimensiunea fișierului
byte[] readAllBytes(Path path)
Returnează întregul conținut al unui fișier ca o matrice de octeți
String readString(Path path)
Returnează întregul conținut al unui fișier ca șir
List<String> readAllLines(Path path)
Returnează întregul conținut al unui fișier ca o listă de șiruri
Path write(Path path, byte[])
Scrie o matrice de octeți într-un fișier
Path writeString(Path path, String str)
Scrie un șir într-un fișier
DirectoryStream<Path> newDirectoryStream(Path dir)
Returnează o colecție de fișiere (și subdirectoare) din directorul dat

2. Crearea de fișiere și directoare

Fișierele și directoarele sunt foarte ușor de creat. Să ne convingem cu câteva exemple:

Cod Notă
Files.createFile(Path.of("c:\\readme.txt"));
Creează un fișier
Files.createDirectory(Path.of("c:\\test"));
Creează un director
Files.createDirectories(Path.of("c:\\test\\1\\2\\3"));
Creează un director și toate subdirectoarele necesare dacă acestea nu există.

3. Copierea, mutarea și ștergerea

Copierea, mutarea și ștergerea fișierelor este la fel de ușoară. Acest lucru este valabil și pentru directoare, dar acestea trebuie să fie goale.

Cod Notă
Path path1 = Path.of("c:\\readme.txt");
Path path2 = Path.of("c:\\readme-copy.txt");
Files.copy(path1, path2);
Copiază un fișier
Path path1 = Path.of("c:\\readme.txt");
Path path2 = Path.of("d:\\readme-new.txt");
Files.move(path1, path2);
Mută ​​și redenumește un fișier
Path path = Path.of("d:\\readme-new.txt");
Files.delete(path);
Șterge un fișier

4. Verificarea tipului și existenței unui fișier

Când aveți o cale furnizată de altcineva, doriți să știți dacă este un fișier sau un director. Și în general, un astfel de fișier/director există sau nu?

Există și metode speciale pentru acest lucru. De asemenea, puteți afla cu ușurință lungimea unui fișier:

Cod Notă
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. Lucrul cu conținutul fișierului

În cele din urmă, există o serie întreagă de metode care facilitează citirea sau scrierea conținutului unui fișier. Exemplu:

Cod Descriere
Path path = Path.of("c:\\readme.txt");
List<String> list = Files.readAllLines(path);

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

Citiți conținutul fișierului ca o listă de șiruri de caractere.

Afișați șirurile


6. Obținerea conținutului unui director

Cea mai interesantă metodă rămâne încă. Este folosit pentru a obține fișiere și subdirectoare într-un anumit director.

Vorbim despre newDirectoryStream()metodă, care returnează un DirectoryStream<Path>obiect special. Are un iterator(!) pe care îl puteți folosi pentru a obține toate fișierele și subdirectoarele unui director dat.

Acest lucru este mai ușor decât pare.

Cod Descriere
Path path = Path.of("c:\\windows");

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


Obțineți un obiect cu o listă de fișiere
Buclă peste lista de fișiere

Obiectul DirectoryStream<Path>are două proprietăți. În primul rând, are un iterator care returnează căile fișierelor și putem folosi acest obiect în interiorul unei for-eachbucle.

Și în al doilea rând, acest obiect este un flux de date, deci trebuie să fie închis în mod explicit folosind close()metoda sau să fie utilizat în interiorul unui try-with-resourcesbloc.



7. Files.newInputStreammetoda

Începând cu Java 5, clasele FileInputStreamși FileOutputStreamau fost depreciate. Unul dintre dezavantajele lor a fost că atunci când sunt create obiecte din aceste clase, fișierele sunt create imediat pe disc. Și toate excepțiile legate de crearea fișierelor ar putea fi eliminate.

Mai târziu, aceasta a fost recunoscută ca nu cea mai bună decizie. În consecință, se recomandă utilizarea metodelor java.nio.Filesclasei de utilitate pentru a crea obiecte fișier.

Iată o comparație între vechea abordare și noua abordare pentru crearea fișierelor:

Inainte de
String src = "c:\\projects\\log.txt";
InputStream input = new FileInputStream(src);
După
String src = "c:\\projects\\log.txt";
InputStream input = Files.newInputStream( Path.of(src) );

Și există un înlocuitor similar pentru FileOutputStream:

Inainte de
String src = "c:\\projects\\log.txt";
OutputStream  output = new FileOutputStream( src );
După
String src = "c:\\projects\\log.txt";
OutputStream  output = Files.newOutputStream( Path.of( src ) );