From 33613a85afc4b1481367fbe92a17ee59c240250b Mon Sep 17 00:00:00 2001
From: Sven Eisenhauer
+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:
+
+
+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:
+
+
+
+
+
+
+ Titel
+ Inhalt
+ Suchen
+ Index
+ DOC
+ Handbuch der Java-Programmierung, 5. Auflage
+
+ <<
+ <
+ >
+ >>
+ API
+ Kapitel 21 - Datei- und Verzeichnis-Handling
+
+
+
+
+
+21.5 Temporäre Dateien und Lockdateien
+
+
+
+
+21.5.1 Temporäre Dateien
+
+
+
+
+
+
+
+
+
+
+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
+
+
+
+Listing 21.7: Anlegen einer temporären Datei
+
+
+
+
+
+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, +dass 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, dass 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, 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 potentiellen 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, 5. Auflage, Addison +Wesley, Version 5.0.1 + |
| << + | < + | > + | >> + | API + | © 1998, 2007 Guido Krüger & Thomas +Stark, http://www.javabuch.de + |