Java 7 Tage NIO.2 – Dateimanipulation mit Files


Gestern haben wir von der neuen Path Klasse in NIO.2 erfahren. Diese repräsentiert jedoch nur den Pfad zu einer Datei, nicht aber die Datei. Möglichkeiten zur Dateimanipulation findet man daher in dieser Klasse vergeblich. Stattdessen bietet Oracle in Java 7 nun die Utiltiy-Klasse Files an.

Eine neue Datei erstellen

Um eine neue Datei zu erstellen bietet die Files Klasse eine Methode createFile(Path pfad, FileAttribute… attrs) an. Über den simplen Aufruf von

try {
    Files.createFile(file);
} catch (FileAlreadyExistsException x) {
    //..
} catch (IOException x) {
    //..
}

wird eine Datei mit Standard Attributen wie zB die Zugriffsberechtigungen angelegt.

Eine Datei öffnen und lesen, schreiben, kopieren, …

Will man eine erstellte Datei nun mit Inhalt füllen geht ebenfalls durchaus schnell von der Hand.

Path path = ...
byte[] bytes = ...
Files.write(path, bytes);

Ganz ohne Streams. Man kann auch in mehreren Schritten die write() Methode aufrufen. Dafür kann man zusätzliche Optionen als dritten Varargs Parameter mitgeben, wie zB einen StandardOpenOption Enum APPEND.

Will man eine Datei auslesen gibt es z.B. folgende Möglichkeit:

for (String line : Files.readAllLines( path, Charset.forName( "UTF-8" )))
System.out.println(line);

Dies sind nur einfache Varianten, es gibt je nach Anwendungsfall noch zusätzliche Vorgehensweisen. Einen Auszug davon findet man unter http://download.oracle.com/javase/tutorial/essential/io/file.html

Außerdem gibt es noch Methoden die sich klassiche Dateioperationen im Dateisystem wiederspiegeln:

Files.copy(Path source, Path destination);
Files.move(Path source, Path destination);
Files.delete(Path p);

Diese Operationen blockieren den aufrufenden Thread bis sie abgearbeitet sind. Sollte während der Verarbeitung ein Fehler passieren können Dateireste zurückbleiben mit die man noch behandeln muss.

File Attribute

Zu guter Letzt noch ein kurz eine Übersicht über einige der neuen Möglichkeiten Standard Dateiattribute wie die Dateigröße, der Besitzer oder das Änderungsdarum auszulesen:

Files.getLastModifiedTime(Path p);
Files.getOwner(Path p);
Files.getPosixFilePermissions(Path p);
Files.isDirectory(Path p);
Files.isExecutable(Path p);
Files.size(Path p);
//...

Happy NIOing

Ähnliche Artikel:

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*