Vorlesung Informatik 2 - Teil A: Java Kurs

6.2 Die Klasse File

Ein Objekt vom Type java.io.File ist ein Pfadname - insofern ist der Klassenname File etwas irreführend.

Einer der Konstruktoren hat einen String-Parameter, mit dem Pfadnamen:

File f = new File("text.txt"); 

Da text.txt ein relativer Pfadname ist, bezieht er sich auf das aktuelle Verzeichnis (working directory) der Applikation. Wird die App aus Eclipse heraus gestartet, ist dies das Hauptverzeichnis des Projekts. 

Ähnlich wie Strings sind auch File Objekte unveränderlich (immutable), d.h. der im Konstruktor festgelegte Pfadname kann nicht mehr geändert werden.

Der Trenner zwischen Verzeichnis-Ebenen ist in Windows '\', in Unix/Linux '/'. Die Klasse File erlaubt aber auf jedem Betriebssystem das Zeichen '/', unter Windows wird es in '\' gewandelt. 

f = new File("src/aufgaben/Aufgabe8.java"); //funktioniert auf Mac, Windows und Linux.

Beginnt ein Pfadname mit einem '/', ist er absolut. Unter Linux/Mac ist '/' die Wurzel des Dateisystems, unter Windows die Partition, auf der sich das aktuelle Verzeichnis befindet.

Die Methoden getPath(), getAbsolutePath() und getCanonicalPath() liefern verschiedene Darstellungen des Pfades als String:

Beispiel: Windows, das aktuelle Verzeichnis sei 'C:\workspace\info2'

File f = new File("src/aufgaben/../aufgabe15");

f.getPath()                  -->   'C:\workspace\info2\src\aufgaben\..\aufgabe15'   
f.getAbsolutePath()   -->   'C:\workspace\info2\src\aufgaben\..\aufgabe15'
f.getCanonicalPath()   -->   'C:\workspace\info2\src\aufgabe15'

Das übergeordnete Verzeichnis liefert getParent():String bzw. getParentFile():File.

Mit exists():boolean kann man prüfen, ob der Pfad auf ein existierendes Objekt im Dateisystem zeigt.

Die Methoden isDirectory():boolean und isFile():boolean prüft man, ob es sich um ein Verzeichnis ode eine Datei handelt, getHidden():boolean sagt, ob es sich um eine versteckte Datei handelt und lastModified():long liefert die Zeit der letzten Änderung als Timestamp (Millisekunden seit dem 1.1.1970).

Die Rechte der laufenden App an dem Objekt, auf das der Pfad zeigt, bekommt man mit canRead():boolean, canWrite():boolean und canExecure():boolean.

Die Länge einer in Byte Datei liefert length():long. Da Dateien länger als 2GB sein können, ist der Return Typ nicht int.

Mit getTotalSpace():long und getFreeSpace():long erhält man die Information zum Platz auf der Festplattenpartition, auf der das Objekt liegt, auf das der Pfad zeigt, mit getUsableSpace():long das Kontingent, das der App nutzen darf.

Zeigt der Pfad auf ein Verzeichnis, kann man dessen Inhalt mit listFiles():File[] abfragen, dazu existiert die überladene Methode listFiles(ff:FileFilter):File[], die mit Hilfe eine Filters nur bestimmte Dateien listet.

Speziell für Windows gibt es noch die statische Methode listRoots():File[], welche die Wurzeln des jeweiligen Dateisystems auflistet (Windows: C:, D:, E:,...)

Achtung: mit den folgenden Methoden manipuliert man das Dateisystem! Also Vorsicht!!!

delete():boolean löscht das Objekt im Dateisystem, auf das der Pfad zeigt. ES GIBT KEINEN PAPIERKORB!!!!!

renameTo(neu:File):boolean  verschiebt das Objekt an die durch neu bezeichnete Stelle im Dateisystem

setExecutable(b:boolean):boolean, setReadable(b:boole)boolean, setWritable(b:boolen):boolean setLastModified(time:long):boolean ändern die jeweilige Eigenschaft

mkdir():boolean erzeugt ein neues Verzeichnis an dem Ort, auf den der Pfad zeigt

mkdirs():boolean wie mkdir, erzeugt falls nötig auch nicht existierende übergeordnete Verzeichnisse



Lehrvideo  (YouTube)