Je joue un peu avec les nouvelles fonctionnalités Java 7 IO, en fait j'essaie de recevoir tous les fichiers xml d'un dossier. Mais cela lève une exception lorsque le dossier n'existe pas, comment puis-je vérifier si le dossier existe avec le nouvel IO?
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
, et encore moins lorsque vous parcourez les entrées du dossier.Réponses:
En utilisant
java.nio.file.Files
:Vous pouvez éventuellement transmettre les
LinkOption
valeurs de cette méthode :Il y a aussi une méthode
notExists
:la source
Files.exists(path)
etFiles.notExists(path)
peuvent renvoyer false en même temps! Cela signifie que Java n'a pas pu déterminer si le chemin existe réellement.!Files.exists(path)
et ceFiles.notExists(path)
n'est pas 100% la même chose. Lorsque Java ne peut pas déterminer si un fichier existe, le premier reviendratrue
et le second reviendrafalse
.Assez facile:
Et si vous voulez être certain que c'est un répertoire:
la source
if(f.isDirectory()) {...}
serait suffisant, car il vérifie également l'existence.java.io.file
ne fait pas partie des "nouvelles fonctionnalités Java 7 IO" auxquelles l'OP fait référence. Lejava.nio.file
package, qui a été introduit dans Java 7, propose les classesPaths
etFiles
. D'autres réponses ici expliquent correctement comment utiliser ces classes plus récentes pour résoudre le problème des OP.Pour vérifier si un répertoire existe avec le nouvel IO:
isDirectory
renvoietrue
si le fichier est un répertoire;false
si le fichier n'existe pas, n'est pas un répertoire, ou il ne peut pas être déterminé si le fichier est un répertoire ou non.Voir: documentation .
la source
Vous devez transformer votre chemin en un
File
et tester son existence:la source
Générez un fichier à partir de la chaîne de votre répertoire de dossiers
et la méthode d'utilisation existent.
Si vous souhaitez générer le dossier, vous devez utiliser mkdir ()
la source
Il n'est pas nécessaire d'appeler séparément la
exists()
méthode, car elleisDirectory()
vérifie implicitement si le répertoire existe ou non.la source
la source
la source
Nous pouvons vérifier les fichiers et leurs dossiers.
la source
Depuis SonarLint , si vous avez déjà le chemin, utilisez
path.toFile().exists()
plutôt queFiles.exists
pour de meilleures performances.Exemple de code non conforme:
Solution conforme:
la source