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

22.5 Temporäre Dateien und 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.

22.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 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
Listing 22.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

22.5.2 Lockdateien

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