Titel | Inhalt | Suchen | Index | API | Go To Java 2, Zweite Auflage, Handbuch der Java-Programmierung |
<< | < | > | >> | Kapitel 21 - 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 daß 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 /* Listing2107.java */ 002 003 import java.io.*; 004 005 public class Listing2107 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 } |
Listing2107.java |
Auf dem Testrechner wurden bei zweimaligem Aufruf des Programms im
Verzeichnis c:\tmp die beiden folgenden
Dateien angelegt:
xyz11626.tmp
xyz39639.tmp
Ein häufiger Kritikpunkt an den JDKs vor der Version 1.2 war, daß Java keine portable Möglichkeit zum Sperren von Dateien vorsah. Damit war es nicht (oder nur mit zusätzlichem Aufwand) möglich, Programme zu schreiben, die in einer Mehrbenutzerumgebung von unterschiedlichen Arbeitsplätzen gleichzeitig kontrolliert auf dieselben Dateien zugreifen. |
|
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, daß die beiden erforderlichen Teiloperationen Feststellen, ob die Datei bereits existiert und Anlegen einer neuen Datei atomar ablaufen, also nicht unterbrechbar sind. Durch Aufruf von deleteOnExit kann sichergestellt werden, daß 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 potentiellen Ressourcen sehr viele einzelne Dateien bedeuten würde). Oder es ist denkbar, daß 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 | API | Go To Java 2, Zweite Auflage, Addison Wesley, Version 2.0 |
<< | < | > | >> | © 2000 Guido Krüger, http://www.gkrueger.com |