Dateien DVG2 - 05 - Dateien 1 Die Klasse File Die Klasse File stellt die Verbindung zwischen dem Filesystem des Rechners und dem JAVA-Programm her. Das Filesystem enthält als Objekte Devices, Verzeichnisse und Dateien. Sie werden durch ihre Namen eindeutig gekennzeichnet. Die Klasse File: Bildet Objekte des Filesystems auf Instanzen der Klasse File ab. Stellt die Verbindung zwischen Datei und Dateinamen her. Ermöglicht das Lesen von Verzeichnissen. Ermöglicht das Lesen von Attributen von Dateien und Verzeichnissen. Ermöglicht das Erzeugen, Löschen, Umbenennen und Modifizieren von Dateien und Verzeichnissen. Stellt eine vom Betriebsystem unabhängige Schnittstelle zur Verfügung. DVG2 - 05 - Dateien 2 Attribute der Klasse File static String pathSeparator liefert die Zeichenkette, die Pfadeinträge im PATH trennt UNIX : ":" WINDOWS: ";" static char pathSeparatorChar das gleiche als Zeichen static String separator liefert die Zeichenkette, die Verzeichnisse im Pfad trennt UNIX : "/" WINDOWS: "\\" static char separatorChar das gleiche als Zeichen DVG2 - 05 - Dateien 3 Konstruktoren der Klasse File File (String pathname) erzeugt ein File-Objekt mit pathname als Pfad File (String parent, String child) erzeugt ein File-Objekt mit einem Pfad child ggf. relativ zu parent File (File parent, String child) File (URI uri) URI: Uniform Resource Identifier, allgemeine standardisierte Beschreibung einer Ressource im Internet Unterstützung der URIs ist neu ab Version 1.4 . Es werden nur URIs unterstützt, die auf lokale allgemein zugängliche Ressourcen im Filesystem zugreifen. Weierentwicklung der URLs (Uniform Resource Locator) Konstruktoren öffnen die Dateien nicht! Es erfolgt kein Zugriff zum Filesystems. DVG2 - 05 - Dateien 4 Statische Methoden der Klasse File static String static String File createTempFile(String prefix, suffix, File directory) File createTempFile(String prefix, suffix) erzeugen temporäres File mit dem Namen: prefix....suffix im Standard-Verzeichnis für temporäre Dateien bzw. im Verzeichnis directory static File [] listRoots() erzeugt ein Feld von File-Objekten, die auf die Wurzelverzeichnisse zeigen, z.B.: Windows: A:\ C:\ D:\ DVG2 - 05 - Dateien 5 Methoden der Klasse File boolean canRead() // Test ob Datei lesbar ist boolean canWrite() // Test ob Datei schreibbar ist boolean exists() // Test ob Datei existiert boolean isAbsolute() // Test ob Pfad absolut ist boolean isDirectory() // Test ob File ein Verzeichnis ist boolean isFile() // Test ob File eine Datei ist boolean isHidden() // Test ob Datei versteckt ist long lastModified() // Zeit der letzten Modifikation in Millisekunden seit 1.1.1970 0.00 GMT boolean setLastModified(long time) // setzt Zeit der letzten Modifikation boolean setReadOnly() // setzt das File auf ReadOnly DVG2 - 05 - Dateien 6 int compareTo(File pathname) vergleicht die Pfadnamen unter Berücksichtigung der Eigenschaften des Filesystems (z.B.: Groß- und Kleinschreibung) f1.compareTo(f2) == 0 wenn Pfadnamen gleich f1.compareTo(f2) < 0 wenn Pfadnamen von f1 vor f2 f1.compareTo(f2) > 0 wenn Pfadnamen von f1 nach f2 int compareTo(Object o) File implementiert Comparable boolean equals (Object o) f1.equals(f2) == true wenn Pfadnamen gleich DVG2 - 05 - Dateien 7 boolean createNewFile() // erzeugt eine neue leere Datei, falls sie noch nicht existiert boolean delete() // löscht das File void deleteOnExit() // löscht das File nach dem Ende des Programms boolean mkdir() // erzeugt ein neues Verzeichnis boolean mkdirs() // erzeugt ein neues Verzeichnis incl. aller erforderlichen Zwischenverzeichnisse boolean renameTo(File dest) // benennt eine Datei um DVG2 - 05 - Dateien 8 File getAbsoluteFile() // gibt das File mit absolutem Pfadnamen aus String getAbsolutePath() // gibt den absoluten Filenamen aus File getCanonicalFile() // gibt das File mit kanonischem Pfadnamen aus String getCanonicalPath() String getName() // gibt den evtl. relativen Filenamen aus String getParent() // gibt das Elternverzeichnis aus File getParentFile() String getPath() long length() // gibt die Länge der Datei aus String toString() // wie getName() URL toURL() // gibt den Filenamen in Form eines URLs aus URI toURI() // gibt den Filenamen in Form eines URIs aus DVG2 - 05 - Dateien 9 int hashCode() String [] list() // gibt eine Liste aller in der Datei enthaltenen Dateien und Unterverzeichnisse aus String [] list(FilenameFilter filter) File [] listFiles() File [] listFiles(FileFilter filter) File [] listFiles(FilenameFilter filter) DVG2 - 05 - Dateien 10 Das Interface FileFilter Mit Hilfe einer Implementation des Interfaces FileFilter kann in der listFiles-Methode der Klasse File eine Auswahl der auszugebenden File-Objekte getroffen werde. Einzige zu implementierende Methode: public boolean accept(File pathname) gibt true zurück, wenn das File-Objekt ausgewählt werden soll und false sonst DVG2 - 05 - Dateien 11 Das Interface FileNameFilter Mit Hilfe einer Implementation des Interfaces FileNameFilter kann in der list- und der listFiles-Methode der Klasse File eine Auswahl der auszugebenden File-Objekte getroffen werde. Einzige zu implementierende Methode: public boolean accept(File dir, String name) gibt true zurück, wenn das File-Objekt ausgewählt werden soll und false sonst DVG2 - 05 - Dateien 12 Beispiel: Verzeichnisinhalt anzeigen import java.io.*; public class Dir { public static void main (String [] args) throws IOException { String dName = (args.length>0?args[0]:"."); File d = new File(dName); if ( d.exists() ) { file(d); if (d.isDirectory()) dir(d); } else System.err.println("File "+dName+" existiert nicht!"); } DVG2 - 05 - Dateien 13 static void file(File d) { System.out.println((d.canRead()?"R":" ")+ (d.canWrite()?"W":" ")+ (d.isHidden()?"H":" ")+(d.isDirectory()?"D":"")+ (d.isFile()?"F":"")+" : "+d.length()+"\t"+ " : "+(new java.util.Date(d.lastModified()))+" : "+d); } static void dir(File d){ System.out.println("Verzeichnis : "+d); File [] files = d.listFiles(); for (int i=0;i<files.length;i++) file(files[i]); for (int i=0;i<files.length;i++) if (files[i].isDirectory()) dir(files[i]); } } DVG2 - 05 - Dateien 14 Beispiel: Verzeichnisinhalt mit Filter anzeigen import java.io.*; public class DirF { public static void main (String [] args) throws IOException { String dName = (args.length>0?args[0]:"."); File d = new File(dName); Filter fil = (args.length>1?new Filter(args[1]):null); if ( d.exists() ) { file(d); if (d.isDirectory()) dir(d, fil); } else System.err.println("File "+dName+" existiert nicht!"); } DVG2 - 05 - Dateien 15 static void file(File d) { System.out.println((d.canRead()?"R":" ")+ (d.canWrite()?"W":" ")+ (d.isHidden()?"H":" ")+(d.isDirectory()?"D":"")+ (d.isFile()?"F":"")+" : "+d.length()+"\t"+ " : "+(new java.util.Date(d.lastModified()))+" : "+d); } static void dir(File d, Filter fil){ System.out.println("Verzeichnis : "+d); File [] files = d.listFiles(fil); for (int i=0;i<files.length;i++) file(files[i]); for (int i=0;i<files.length;i++) if (files[i].isDirectory()) dir(files[i], fil); } DVG2 - 05 - Dateien 16 static class Filter implements FileFilter { private String match; Filter (String match) { this.match=match; } public boolean accept (File f) { if (f.isDirectory()) return true; try { return f.getCanonicalPath().indexOf(match)>=0; } catch (Exception e) {} return false; } } } DVG2 - 05 - Dateien 17