Ich möchte überprüfen, ob sich eine vorhandene Datei in einem bestimmten Verzeichnis oder Unterverzeichnis befindet.
Ich habe zwei Dateiobjekte.
%Vor%Beide sind garantiert zu existieren. Nehmen wir an
%Vor%Ich möchte, dass diese Prüfung wahr zurückgibt
Für jetzt mache ich die Überprüfung auf diese Weise:
%Vor%Dies scheint mit meinen begrenzten Tests zu funktionieren, aber ich bin mir nicht sicher, ob dies auf einigen Betriebssystemen Probleme verursachen könnte. Ich mag auch nicht, dass getCanonicalPath () eine IOException auslösen kann, die ich behandeln muss.
Gibt es einen besseren Weg? Möglicherweise in einer Bibliothek?
Danke
Zusätzlich zum asnwer von rocketboy verwenden Sie getCanonicalPath()
instad von getAbsolutePath()
, damit \dir\dir2\..\file
in \dir\file
:
oder
%Vor% Vergessen Sie nicht, Exception
mit try {...} catch {...}
zu fangen.
HINWEIS: Sie können FileSystem.getSeparator()
anstelle von File.separator
verwenden. Der 'korrekte' Weg ist, das getCanonicalPath()
des Verzeichnisses, das Sie überprüfen wollen, als String
zu erhalten, dann zu prüfen, ob es mit einem File.separator
endet und wenn nicht, dann fügen Sie File.separator
hinzu Das Ende dieses String
, um doppelte Schrägstriche zu vermeiden. Auf diese Weise überspringen Sie zukünftige ungerade Verhalten, wenn Java beschließt, Verzeichnisse am Ende mit einem Schrägstrich zurückzugeben, oder wenn Ihre Verzeichniszeichenfolge von woanders als Java.io.File
kommt.
NOTE2: Danke an @david, um auf das File.separator
-Problem zu zeigen.
Diese Methode sieht ziemlich solide aus:
%Vor% angezeigt wirdEs ist ähnlich der Lösung von dacwe, verwendet aber keine Rekursion (obwohl das in diesem Fall keinen großen Unterschied machen sollte).
Wenn Sie vorhaben, mit Dateien und Dateinamen schwer zu arbeiten, prüfen Sie die Bibliotheken apache fileutils und filenetutils. Sind voll von nützlichen (und Portale, wenn Portabilität ist mamdatory) Funktionen
Tags und Links java