Ich spiele ein bisschen mit den neuen Java 7 IO-Funktionen, eigentlich versuche ich, alle XML-Dateien eines Ordners zu empfangen. Dies löst jedoch eine Ausnahme aus, wenn der Ordner nicht vorhanden ist. Wie kann ich überprüfen, ob der Ordner mit dem neuen E / A vorhanden ist?
public UpdateHandler(String release) {
log.info("searching for configuration files in folder " + release);
Path releaseFolder = Paths.get(release);
try(DirectoryStream<Path> stream = Files.newDirectoryStream(releaseFolder, "*.xml")){
for (Path entry: stream){
log.info("working on file " + entry.getFileName());
}
}
catch (IOException e){
log.error("error while retrieving update configuration files " + e.getMessage());
}
}
DirectoryStream
, geschweige denn, wenn Sie die Ordnereinträge durchlaufen.Antworten:
Verwenden von
java.nio.file.Files
:Sie können diese Methodenwerte optional übergeben
LinkOption
:Es gibt auch eine Methode
notExists
:quelle
Files.exists(path)
undFiles.notExists(path)
gleichzeitig false zurückgeben können! Dies bedeutet, dass Java nicht feststellen konnte, ob der Pfad tatsächlich vorhanden ist.!Files.exists(path)
undFiles.notExists(path)
sind nicht 100% das gleiche. Wenn Java nicht feststellen kann, ob eine Datei vorhanden ist, wird die erstetrue
und die zweite Datei zurückgegebenfalse
.Ziemlich einfach:
Und wenn Sie sicher sein wollen, ist es ein Verzeichnis:
quelle
if(f.isDirectory()) {...}
würde ausreichen, da es auch die Existenz prüft.java.io.file
ist nicht Teil der "neuen Java 7 IO-Funktionen", auf die sich das OP bezieht. Dasjava.nio.file
in Java 7 eingeführte Paket bietet die KlassenPaths
undFiles
. Andere Antworten hier erklären richtig, wie diese neueren Klassen verwendet werden, um das OP-Problem zu lösen.So überprüfen Sie, ob ein Verzeichnis mit dem neuen E / A vorhanden ist:
isDirectory
Gibt zurück,true
wenn die Datei ein Verzeichnis ist.false
Wenn die Datei nicht vorhanden ist, kein Verzeichnis ist oder nicht festgestellt werden kann, ob es sich bei der Datei um ein Verzeichnis handelt oder nicht.Siehe: Dokumentation .
quelle
Sie müssen Ihren Pfad in einen verwandeln
File
und auf Existenz prüfen:quelle
Generieren Sie eine Datei aus der Zeichenfolge Ihres Ordnerverzeichnisses
und Verwendungsmethode existieren.
Wenn Sie den Ordner generieren möchten, sollten Sie mkdir () verwenden.
quelle
Die
exists()
Methode muss nicht separat aufgerufen werden, daisDirectory()
implizit geprüft wird, ob das Verzeichnis vorhanden ist oder nicht.quelle
quelle
quelle
Wir können Dateien und drei Ordner überprüfen.
quelle
Von SonarLint , wenn Sie bereits den Pfad haben, verwenden Sie
path.toFile().exists()
stattFiles.exists
für eine bessere Leistung.Beispiel für nicht konformen Code:
Konforme Lösung:
quelle