Titel | Inhalt | Suchen | Index | DOC | Handbuch der Java-Programmierung, 3. Auflage
<< | < | > | >> | API | Kapitel 21 - Datei- und Verzeichnis-Handling

## 21.5 Temporäre Dateien und Lockdateien

- 21.5 Temporäre Dateien und Lockdateien
  - 21.5.1 Temporäre Dateien
  - 21.5.2 Lockdateien

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.

### 21.5.1 Temporäre Dateien

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

Listing 21.7: Anlegen einer temporären Datei

Auf dem Testrechner wurden bei zweimaligem Aufruf des Programms im Verzeichnis c:\tmp die beiden folgenden Dateien angelegt:

    xyz11626.tmp
    xyz39639.tmp

### 21.5.2 Lockdateien

|  |  |  | 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. |  |
JDK1.1-1.4

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 | DOC | Handbuch der Java-Programmierung, 3. Auflage, Addison Wesley, Version 3.0
<< | < | > | >> | API | © 1998-2002 Guido Krüger, http://www.javabuch.de