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
Schreibe einen Kommentar