Java java.nio.file.Files exists()-Methode
java.nio.file.Files.exists()Die Methode ist eine sehr praktische Hilfsmethode im Java NIO (New I/O)-Paket, mit der überprüft werden kann, ob die Datei oder das Verzeichnis unter einem angegebenen Pfad existiert. In der täglichen Entwicklung ist die Existenzprüfung vor Dateioperationen ein häufiges Erfordernis, undexists()Die Methode bietet hierfür eine einfache und effiziente Lösung.
Methodendefinition
Files.exists()Die Methode hat die folgenden zwei überladenen Formen:
Grundform:
Form mit LinkOption:
Beispiel
Parameterbeschreibung
Path path
- Type:
java.nio.file.Path - Beschreibung: Das Path-Objekt der zu überprüfenden Datei oder des zu überprüfenden Verzeichnisses
- Beispiel:
Path path = Paths.get("example.txt");
LinkOption... options
- Typ: Argument variabler Länge von
LinkOptionenum - Beschreibung: Optionaler Parameter, der steuert, wie symbolische Links behandelt werden
- Optionale Werte:
LinkOption.NOFOLLOW_LINKS: Symbolischen Links nicht folgen
- Standardverhalten: Wenn dieser Parameter nicht angegeben wird, folgt die Methode symbolischen Links, um die Zieldatei zu überprüfen
Rückgabewert
- Type:
boolean - Beschreibung:
true: Wenn die Datei/das Verzeichnis existiertfalse: Wenn die Datei/das Verzeichnis nicht existiert- Wenn nicht bestimmt werden kann, ob die Datei existiert (z. B. aufgrund von Berechtigungsproblemen), kann eine Ausnahme ausgelöst werden
Anwendungsbeispiel
Grundlegende Verwendung
Beispiel
public class FileExistsExample {
public static void main(String[] args) {
Path filePath = Paths.get("test.txt");
if (Files.exists(filePath)) {
System.out.println("Datei existiert");
} else {
System.out.println("Datei existiert nicht");
}
}
}
Prüfen, ob das Verzeichnis existiert
Beispiel
if (Files.exists(dirPath)) {
System.out.println("Verzeichnis existiert");
}
LinkOption verwenden, um symbolischen Links nicht zu folgen
Beispiel
if (Files.exists(symlinkPath, LinkOption.NOFOLLOW_LINKS)) {
System.out.println("Symbolischer Link existiert (Linkziel nicht überprüft)");
}
Hinweise
Nebenläufigkeitsprobleme:
- Selbst wenn
exists()zurückgibttrue, wurde die Datei möglicherweise bis zum Zeitpunkt nachfolgender Operationen gelöscht - Für kritische Operationen wird empfohlen, die Operation direkt in einem try-catch-Block auszuführen, anstatt zuerst die Existenz zu prüfen
- Selbst wenn
Leistungsüberlegungen:
- Mehrfache Aufrufe von
exists()können Performance-Overhead verursachen - Bei Szenarien mit häufigen Prüfungen sollten Sie in Betracht ziehen, Ergebnisse zwischenzuspeichern oder andere Mechanismen zu verwenden
- Mehrfache Aufrufe von
Alternative Methoden:
Files.notExists()Jaexists()die inverse Methode von- Für Fälle, in denen Sie eine Datei erstellen müssen, können Sie verwenden
Files.createFile()Methode, die eine Ausnahme auslöst, wenn die Datei bereits existiert
Ausnahmebehandlung:
- Die Methode kann auslösen
SecurityException(wenn keine Zugriffsberechtigung besteht) - Andere I/O-Fehler können ebenfalls Ausnahmen verursachen
- Die Methode kann auslösen
Vergleich mit anderen Methoden
| Methode | Beschreibung | Unterschied |
|---|---|---|
File.exists() |
Existenzprüfung mit der Klasse java.io.File | Alte API, normalerweise schlechtere Leistung |
Files.exists() |
Existenzprüfung mit NIO | Moderner, unterstützt mehr Optionen |
Files.notExists() |
Prüfen, dass die Datei nicht existiert | Umgekehrte Logik, aber beachten Sie den "unbekannten" Zustand |
Best Practices
Redundante Prüfungen vermeiden:
Beispiel
if (Files.exists(path)) {
Files.delete(path);
}
// Empfohlen
try {
Files.delete(path);
} catch (NoSuchFileException e) {
// Den Fall behandeln, bei dem die Datei nicht existiert
}
Mit anderen Prüfungen kombinieren:
Beispiel
// Reguläre Dateien behandeln
}
Korrekte Handhabung symbolischer Links:
Beispiel
boolean linkExists = Files.exists(path, LinkOption.NOFOLLOW_LINKS);
// Prüfen, ob das Linkziel existiert
boolean targetExists = Files.exists(path);
Zusammenfassung
Files.exists()Die Methode ist eine einfache, aber wichtige Hilfsmethode in Java-NIO-Dateioperationen. Sie bietet einen Standardweg, die Existenz von Dateien/Verzeichnissen zu prüfen, unterstützt Optionen zur Handhabung symbolischer Links und ist eine moderne Alternative zur traditionellenFile.exists()modernen Lösung. In der tatsächlichen Verwendung sollten Entwickler ihre Einschränkungen beachten, insbesondere Zuverlässigkeitsprobleme in nebenläufigen Umgebungen, und erwägen, Dateioperationen direkt in Ausnahmebehandlungsblöcke zu platzieren, anstatt sich auf vorherige Existenzprüfungen zu verlassen.
Java java.nio.file.Files