Titel | Inhalt | Suchen | Index | DOC | Handbuch der Java-Programmierung, 7. Auflage |
<< | < | > | >> | API | Kapitel 22 - Datei- und Verzeichnis-Handling |
Das Anlegen von Dateien wurde ja bereits in früheren Abschnitten behandelt. Hier soll es noch einmal erwähnt werden, weil die Klasse File zusätzlich die Möglichkeit bietet, temporäre Dateien und Lockdateien anzulegen. Beide Varianten haben ihre Anwendungen und wir wollen sie im Folgenden kurz vorstellen.
Zum Anlegen von temporären Dateien stehen zwei Varianten der Methode createTempFile zur Verfügung:
public static File createTempFile( String prefix, String suffix, File dir ) throws IOException public static File createTempFile( String prefix, String suffix ) throws IOException |
java.io.File |
In beiden Fällen ist es erforderlich, einen Präfix- und einen Suffix-String zu spezifizieren. Als Präfix sollte normalerweise ein kurzer String von drei oder vier Buchstaben verwendet werden, der den Typ der temporären Datei identifiziert. Der Suffix wird als Dateierweiterung verwendet, er könnte beispielsweise .tmp oder .$$$ sein. createTempFile füllt den Platz zwischen Präfix und Erweiterung mit einer Zeichenkette, so dass der resultierende Dateiname eindeutig ist. Wird kein weiterer Parameter angegeben, legt die Methode eine neue temporäre Datei in einem systemspezifischen Verzeichnis an (typischerweise \tmp oder \temp). Optional kann als drittes Argument ein File-Objekt übergeben werden, das ein alternatives Verzeichnis für die temporäre Datei angibt.
Das folgende Listing zeigt ein einfaches Beispiel für die Anwendung der Methode createTempFile:
001 /* Listing2207.java */ 002 003 import java.io.*; 004 005 public class Listing2207 006 { 007 public static void main(String[] args) 008 { 009 try { 010 File tmp = File.createTempFile("xyz", ".tmp", null); 011 } catch (IOException e) { 012 System.out.println(e.toString()); 013 } 014 } 015 } |
Listing2207.java |
Auf dem Testrechner wurden bei zweimaligem Aufruf des Programms im
Verzeichnis c:\tmp die beiden folgenden
Dateien angelegt:
xyz11626.tmp
xyz39639.tmp
Mit den Methoden createNewFile und deleteOnExit bietet das JDK seit der Version 1.2 nun eine rudimentäre Möglichkeit, diese Fähigkeiten zu realisieren:
public boolean createNewFile() throws IOException public void deleteOnExit() |
java.io.File |
createNewFile erzeugt eine neue Datei aus dem Dateinamen des zugehörigen File-Objekts. Die Datei wird aber nur dann erzeugt, wenn sie bisher noch nicht vorhanden war. War sie dagegen bereits vorhanden, schlägt der Aufruf fehl und liefert false als Rückgabewert. Bei Erfolg wird die Datei angelegt und true zurückgegeben. Das JDK garantiert, dass die beiden erforderlichen Teiloperationen Feststellen, ob die Datei bereits existiert und Anlegen einer neuen Datei auf der Ebene des kompletten Dateisystems atomar ablaufen, also nicht unterbrechbar sind. Durch Aufruf von deleteOnExit kann sichergestellt werden, dass die Datei beim Beenden der VM in jedem Fall gelöscht wird, selbst wenn das Ende durch eine Ausnahme ausgelöst wurde.
Beide Methoden können nun auf unterschiedliche Weise zur Realisierung eines Locking-Systems verwendet werden. So kann beispielsweise der Name der Datei als zu sperrende Ressource und die Datei selbst als eigentliche Sperre angesehen werden. Dann würde es für jede zu sperrende Ressource eine eigene Sperrdatei geben (was bei einer großen Anzahl von potenziellen Ressourcen sehr viele einzelne Dateien bedeuten würde). Oder es ist denkbar, dass alle Sperrinformationen in einer einzigen Datei gehalten werden und nur der Zugriff auf diese Datei mit Hilfe einer Sperrdatei gesichert wird. Diese würde dann mit createNewFile in der Art eines Semaphors angelegt werden, um die Sperrdatei zu betreten, und nach Ende der Bearbeitung wieder entfernt werden.
Titel | Inhalt | Suchen | Index | DOC | Handbuch der Java-Programmierung, 7. Auflage, Addison Wesley, Version 7.0 |
<< | < | > | >> | API | © 1998, 2011 Guido Krüger & Heiko Hansen, http://www.javabuch.de |