1. Filesklasse

Filer klasse

For å jobbe med filer er det en glatt verktøyklasse - java.nio.file.Files. Den har metoder for enhver anledning. Alle metodene i denne klassen er statiske og opererer på Path-objektet. Det er mange metoder, så vi vil bare vurdere de viktigste:

Metode Beskrivelse
Path createFile(Path path)
Oppretter en ny fil hvis bane erpath
Path createDirectory(Path path)
Oppretter en ny katalog
Path createDirectories(Path path)
Oppretter flere kataloger
Path createTempFile(prefix, suffix)
Oppretter en midlertidig fil
Path createTempDirectory(prefix)
Oppretter en midlertidig katalog
void delete(Path path)
Sletter en fil eller katalog 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)
Sjekker om banen er en katalog og ikke en fil
boolean isRegularFile(Path path)
Sjekker om banen er en fil og ikke en katalog
boolean exists(Path path)
Sjekker om et objekt eksisterer på den gitte banen
long size(Path path)
Returnerer filstørrelsen
byte[] readAllBytes(Path path)
Returnerer hele innholdet i en fil som en rekke byte
String readString(Path path)
Returnerer hele innholdet i en fil som en streng
List<String> readAllLines(Path path)
Returnerer hele innholdet i en fil som en liste over strenger
Path write(Path path, byte[])
Skriver en rekke byte til en fil
Path writeString(Path path, String str)
Skriver en streng til en fil
DirectoryStream<Path> newDirectoryStream(Path dir)
Returnerer en samling filer (og underkataloger) fra den gitte katalogen

2. Opprette filer og kataloger

Filer og kataloger er veldig enkle å lage. La oss overbevise oss selv med noen eksempler:

Kode Merk
Files.createFile(Path.of("c:\\readme.txt"));
Oppretter en fil
Files.createDirectory(Path.of("c:\\test"));
Oppretter en katalog
Files.createDirectories(Path.of("c:\\test\\1\\2\\3"));
Oppretter en katalog og alle nødvendige underkataloger hvis de ikke finnes.

3. Kopiering, flytting og sletting

Det er like enkelt å kopiere, flytte og slette filer. Dette gjelder også kataloger, men de må være tomme.

Kode Merk
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 gir nytt navn til en fil
Path path = Path.of("d:\\readme-new.txt");
Files.delete(path);
Sletter en fil

4. Sjekke en filtype og eksistens

Når du har en bane gitt av noen andre, vil du vite om det er en fil eller en katalog. Og generelt, eksisterer en slik fil/katalog eller ikke?

Det finnes spesielle metoder for dette også. Du kan også enkelt finne ut lengden på en fil:

Kode Merk
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. Arbeide med filinnhold

Til slutt er det en hel rekke metoder som gjør det enkelt å lese eller skrive innholdet i 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);

Les innholdet i filen som en liste over strenger.

Vis strengene


6. Få innholdet i en katalog

Den mest interessante metoden gjenstår fortsatt. Den brukes til å hente filer og underkataloger i en gitt katalog.

Vi snakker om newDirectoryStream()metoden, som returnerer et spesielt DirectoryStream<Path>objekt. Den har en iterator(!) som du kan bruke for å få alle filene og underkatalogene til en gitt katalog.

Dette er enklere enn det høres ut.

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
Sløyfe over listen over filer

Objektet DirectoryStream<Path>har to egenskaper. For det første har den en iterator som returnerer filstier, og vi kan bruke dette objektet inne i en for-eachløkke.

Og for det andre er dette objektet en datastrøm, så det må eksplisitt lukkes ved hjelp av close()metoden, eller erklært bruk inne i en try-with-resourcesblokk.



7. Files.newInputStreammetode

Fra og med Java 5 har klassene FileInputStreamog FileOutputStreamblitt avviklet. En av ulempene deres var at når objekter av disse klassene opprettes, opprettes filer umiddelbart på disken. Og alle unntak relatert til filoppretting kan potensielt bli kastet.

Senere ble dette anerkjent som ikke den beste avgjørelsen. Følgelig anbefales det å bruke metodene til verktøyklassen java.nio.Filesfor å lage filobjekter.

Her er en sammenligning mellom den gamle tilnærmingen og den nye tilnærmingen til å lage filer:

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

Og det er en lignende erstatning for FileOutputStream:

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