Java 7 Tage NIO.2 – File Attributes

NIO2 stellt eine Erweiterung der File API in der Java Welt dar. Was davon in Java 7 auf uns zukommt, und wie man mit NIO2 Datei Attribute ausliest gibts hier.

Nachdem wir im gestrigen Java 7 Artikel über NIO.2 die Hilfsklasse Files kennengelernt haben, dreht sich der heutige Artikel gänzlich um die Datei Attribute. Gestern haben wir gesehen, dass Files Methoden wie

Files.getOwner(Path p);
Files.size(Path p);

bereitstellt mit denen man die ersten Attribute auslesen kann. Heute wollen wir uns ansehen wie man noch an andere Attribute einer Datei gelangt. Dafür bietet NIO.2 mit dem Paket java.nio.file.attribute sehr flexible Möglichkeiten. Darin wird dem Programmierer eine Schnittstelle geboten, die ihm Zugriff auf verschiedenste Dateisysteme lässt. Das ist wichtig, denn jedes Filesystem kann diverse Attribute unterschiedlich verwalten. Für jedes dieser Dateisysteme gibt es nun eine Sicht – eine View-Klasse die den zugriff lesend oder schreibend erlaubt. So gibt es um auf Attribute eines DOS-Dateisystems zuzugreifen eine DosFileAttributeView.

Jede dieser FileAttributeView Klassen liefert liefert dem Programmiere eine FileAttributes Klasse die Methoden zum Auslesen der Eigenschaften bereitstellen. Bei der DosFileAttributeView wäre das die DosFileAttribute Klasse. Diese wird über die getAttribute() Methode zurückgeliefert.

Path p = Paths.get(“nullpointer.txt”);
DosFileAttributes attrs = Files.readAttributes(p, DosFileAttributes.class);

//Klassenspezifische Attribute
attrs.isArchive();
attrs.isHidden();
attrs.isReadOnly();
attrs.isSystem();

//von BaseFileAttributes vererbt
attrs.creationTime();
attrs.fileKey();
attrs.isDirectory();
attrs.isOther();
attrs.isRegularFile();
attrs.isSymbolicLink();
attrs.lastAccessTime();
attrs.lastModifiedTime();
attrs.size();

siehe auch: http://openjdk.java.net/projects/nio/javadoc/java/nio/file/attribute/DosFileAttributes.html

Neben DosFileSystem existiert bereits eine Implementierung des Portable Operating System Interface – PosixFileAttributes die die Methoden

attrs.group();
attrs.owner();
attrs.permissions();

neben den von BaseFileAttributes vererbten zur Verfügung stehen. Um die Zugriffsrechte auf die Dateien leicht verwalten zu können liefert einerseits die permission() Methode ein Set<PosixFilePermission> zurück, welches als ein Enum realisiert ist: GROUP_EXECUTE, GROUP_READ, GROUP_WRITE, OTHER_EXECUTE, …, OWNER_EXECUTE, … Daneben steht eine neue Util Klasse zur Verfügung mit deren man Rechteangaben in der Unix-Notation konvertieren kann

Set<PosixFilePermission> perms = PosifFilePermissions.fromString(“rwxrwxr—“);
String unixNot = PosixFilePermissions.toString(Perms);

Dabei geht die Files Klasse zum Auslesen der Attribute einen schnellen Weg und liefert direkt die Attributs Klasse, will man hingegen Attribute auch schreiben benötigt man die vorher angesprochene FileAttributeView, welche entsprechende Setter zur Verfügung stellt.

z.B.

DosFileAttributeView view = Files.getFileAttributeView(p, DosFileAttributeView.class);
view.setHidden(true);

Auch können diese Attribute direkt per String referenziert werden, so dass das System für die zukünftigen Entwicklungen in den Dateisystemen flexibel bleibt. Näheres dazu in der Javadoc.

Files.getAttribute(p, “dos:hidden”);

Happy NIOing :D

Ähnliche Artikel: