1. Filesklasse

Klasse filer

For at arbejde med filer er der en smart hjælpeklasse — java.nio.file.Files. Det har metoder til enhver lejlighed. Alle metoderne i denne klasse er statiske og fungerer på Path-objektet. Der er mange metoder, så vi vil kun overveje de vigtigste:

Metode Beskrivelse
Path createFile(Path path)
Opretter en ny fil, hvis sti erpath
Path createDirectory(Path path)
Opretter en ny mappe
Path createDirectories(Path path)
Opretter flere mapper
Path createTempFile(prefix, suffix)
Opretter en midlertidig fil
Path createTempDirectory(prefix)
Opretter en midlertidig mappe
void delete(Path path)
Sletter en fil eller mappe, hvis den er tom
Path copy(Path src, Path dest)
Kopierer en fil
Path move(Path src, Path dest)
Flytter en fil
boolean isDirectory(Path path)
Kontrollerer, om stien er en mappe og ikke en fil
boolean isRegularFile(Path path)
Kontrollerer, om stien er en fil og ikke en mappe
boolean exists(Path path)
Kontrollerer, om der findes et objekt på den givne sti
long size(Path path)
Returnerer filstørrelsen
byte[] readAllBytes(Path path)
Returnerer hele indholdet af en fil som en matrix af bytes
String readString(Path path)
Returnerer hele indholdet af en fil som en streng
List<String> readAllLines(Path path)
Returnerer hele indholdet af en fil som en liste over strenge
Path write(Path path, byte[])
Skriver et array af bytes til en fil
Path writeString(Path path, String str)
Skriver en streng til en fil
DirectoryStream<Path> newDirectoryStream(Path dir)
Returnerer en samling af filer (og undermapper) fra den givne mappe

2. Oprettelse af filer og mapper

Filer og mapper er meget nemme at oprette. Lad os overbevise os selv med nogle eksempler:

Kode Bemærk
Files.createFile(Path.of("c:\\readme.txt"));
Opretter en fil
Files.createDirectory(Path.of("c:\\test"));
Opretter en mappe
Files.createDirectories(Path.of("c:\\test\\1\\2\\3"));
Opretter en mappe og alle de nødvendige undermapper, hvis de ikke findes.

3. Kopiering, flytning og sletning

Det er lige så nemt at kopiere, flytte og slette filer. Dette gælder også for mapper, men de skal være tomme.

Kode Bemærk
Path path1 = Path.of("c:\\readme.txt");
Path path2 = Path.of("c:\\readme-copy.txt");
Files.copy(path1, path2);
Kopierer en fil
Path path1 = Path.of("c:\\readme.txt");
Path path2 = Path.of("d:\\readme-new.txt");
Files.move(path1, path2);
Flytter og omdøber en fil
Path path = Path.of("d:\\readme-new.txt");
Files.delete(path);
Sletter en fil

4. Kontrol af en fils type og eksistens

Når du har en sti leveret af en anden, vil du gerne vide, om det er en fil eller en mappe. Og generelt, findes en sådan fil/mappe eller ej?

Der er også specielle metoder til dette. Du kan også nemt finde ud af længden af ​​en fil:

Kode Bemærk
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. Arbejde med filindhold

Endelig er der en hel række metoder, der gør det nemt at læse eller skrive indholdet af en fil. Eksempel:

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

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

Læs indholdet af filen som en liste over strenge.

Vis strengene


6. Hentning af indholdet af en mappe

Den mest interessante metode er stadig tilbage. Det bruges til at hente filer og undermapper i en given mappe.

Vi taler om newDirectoryStream()metoden, som returnerer et særligt DirectoryStream<Path>objekt. Den har en iterator(!), som du kan bruge til at hente alle filer og undermapper i en given mappe.

Dette er nemmere end det lyder.

Kode Beskrivelse
Path path = Path.of("c:\\windows");

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


Hent et objekt med en liste over filer
Løft over listen over filer

Objektet DirectoryStream<Path>har to egenskaber. For det første har den en iterator, der returnerer filstier, og vi kan bruge dette objekt inde i en for-eachloop.

Og for det andet er dette objekt en datastrøm, så det skal eksplicit lukkes ved hjælp af metoden close(), eller erklæres brug inde i en try-with-resourcesblok.



7. Files.newInputStreammetode

Fra og med Java 5 er klasserne FileInputStreamog FileOutputStreamblevet forældet. En af deres ulemper var, at når objekter af disse klasser oprettes, oprettes filer straks på disken. Og alle undtagelser relateret til filoprettelse kan potentielt blive kastet.

Senere blev dette anerkendt som ikke den bedste beslutning. Derfor anbefales det at bruge værktøjsklassens metoder java.nio.Filestil at oprette filobjekter.

Her er en sammenligning mellem den gamle tilgang og den nye tilgang til oprettelse af filer:

Før
String src = "c:\\projects\\log.txt";
InputStream input = new FileInputStream(src);
Efter
String src = "c:\\projects\\log.txt";
InputStream input = Files.newInputStream( Path.of(src) );

Og der er en lignende erstatning for FileOutputStream:

Før
String src = "c:\\projects\\log.txt";
OutputStream  output = new FileOutputStream( src );
Efter
String src = "c:\\projects\\log.txt";
OutputStream  output = Files.newOutputStream( Path.of( src ) );