1. Filesklasse

Bestanden klasse

Om met bestanden te werken, is er een gelikte hulpprogrammaklasse - java.nio.file.Files. Het heeft methoden voor elke gelegenheid. Alle methoden van deze klasse zijn statisch en werken op Path-object. Er zijn veel methoden, dus we zullen alleen de belangrijkste bekijken:

Methode Beschrijving
Path createFile(Path path)
Maakt een nieuw bestand waarvan het pad ispath
Path createDirectory(Path path)
Maakt een nieuwe map aan
Path createDirectories(Path path)
Maakt meerdere mappen aan
Path createTempFile(prefix, suffix)
Maakt een tijdelijk bestand aan
Path createTempDirectory(prefix)
Maakt een tijdelijke map aan
void delete(Path path)
Verwijdert een bestand of map als deze leeg is
Path copy(Path src, Path dest)
Kopieert een bestand
Path move(Path src, Path dest)
Verplaatst een bestand
boolean isDirectory(Path path)
Controleert of het pad een directory is en geen bestand
boolean isRegularFile(Path path)
Controleert of het pad een bestand is en geen map
boolean exists(Path path)
Controleert of er een object bestaat op het gegeven pad
long size(Path path)
Retourneert de bestandsgrootte
byte[] readAllBytes(Path path)
Retourneert de volledige inhoud van een bestand als een reeks bytes
String readString(Path path)
Retourneert de volledige inhoud van een bestand als een tekenreeks
List<String> readAllLines(Path path)
Retourneert de volledige inhoud van een bestand als een lijst met tekenreeksen
Path write(Path path, byte[])
Schrijft een reeks bytes naar een bestand
Path writeString(Path path, String str)
Schrijft een string naar een bestand
DirectoryStream<Path> newDirectoryStream(Path dir)
Retourneert een verzameling bestanden (en submappen) uit de opgegeven map

2. Bestanden en mappen maken

Bestanden en mappen zijn heel eenvoudig aan te maken. Laten we onszelf overtuigen met enkele voorbeelden:

Code Opmerking
Files.createFile(Path.of("c:\\readme.txt"));
Maakt een bestand aan
Files.createDirectory(Path.of("c:\\test"));
Maakt een map aan
Files.createDirectories(Path.of("c:\\test\\1\\2\\3"));
Creëert een map en alle noodzakelijke submappen als ze niet bestaan.

3. Kopiëren, verplaatsen en verwijderen

Het kopiëren, verplaatsen en verwijderen van bestanden is net zo eenvoudig. Dit geldt ook voor mappen, maar deze moeten leeg zijn.

Code Opmerking
Path path1 = Path.of("c:\\readme.txt");
Path path2 = Path.of("c:\\readme-copy.txt");
Files.copy(path1, path2);
Kopieert een bestand
Path path1 = Path.of("c:\\readme.txt");
Path path2 = Path.of("d:\\readme-new.txt");
Files.move(path1, path2);
Verplaatst en hernoemt een bestand
Path path = Path.of("d:\\readme-new.txt");
Files.delete(path);
Verwijdert een bestand

4. Het type en bestaan ​​van een bestand controleren

Als je een pad hebt opgegeven door iemand anders, wil je weten of het een bestand of een map is. En bestaat er in het algemeen zo'n bestand/directory of niet?

Ook hiervoor zijn speciale methodes. U kunt ook eenvoudig de lengte van een bestand achterhalen:

Code Opmerking
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. Werken met bestandsinhoud

Ten slotte zijn er nog een hele reeks methodes die het gemakkelijk maken om de inhoud van een bestand te lezen of te schrijven. Voorbeeld:

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

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

Lees de inhoud van het bestand als een lijst met tekenreeksen.

Geef de tekenreeksen weer


6. De inhoud van een map ophalen

De meest interessante methode blijft nog steeds bestaan. Het wordt gebruikt om bestanden en submappen in een bepaalde map te krijgen.

We hebben het over de newDirectoryStream()methode, die een speciaal DirectoryStream<Path>object retourneert. Het heeft een iterator(!) die je kunt gebruiken om alle bestanden en submappen van een bepaalde map op te halen.

Dit is makkelijker dan het klinkt.

Code Beschrijving
Path path = Path.of("c:\\windows");

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


Een object ophalen met een lijst met bestanden
Loop over de lijst met bestanden

Het DirectoryStream<Path>object heeft twee eigenschappen. Ten eerste heeft het een iterator die bestandspaden retourneert, en we kunnen dit object binnen een for-eachlus gebruiken.

En ten tweede is dit object een gegevensstroom, dus het moet expliciet worden gesloten met behulp van de close()methode, of gedeclareerd gebruik binnen een try-with-resourcesblok.



7. Files.newInputStreammethode

Vanaf Java 5 zijn de klassen FileInputStreamen FileOutputStreamafgeschaft. Een van hun nadelen was dat wanneer objecten van deze klassen worden gemaakt, er onmiddellijk bestanden op schijf worden gemaakt. En alle uitzonderingen met betrekking tot het maken van bestanden kunnen mogelijk worden gegenereerd.

Later werd dit erkend als niet de beste beslissing. Daarom wordt aanbevolen om de methoden van de java.nio.Filesklasse utility te gebruiken om bestandsobjecten te maken.

Hier is een vergelijking tussen de oude aanpak en de nieuwe aanpak voor het maken van bestanden:

Voor
String src = "c:\\projects\\log.txt";
InputStream input = new FileInputStream(src);
Na
String src = "c:\\projects\\log.txt";
InputStream input = Files.newInputStream( Path.of(src) );

En er is een soortgelijke vervanging voor FileOutputStream:

Voor
String src = "c:\\projects\\log.txt";
OutputStream  output = new FileOutputStream( src );
Na
String src = "c:\\projects\\log.txt";
OutputStream  output = Files.newOutputStream( Path.of( src ) );