Estoy jugando un poco con las nuevas características de Java 7 IO, en realidad estoy tratando de recibir todos los archivos xml de una carpeta. Pero esto arroja una excepción cuando la carpeta no existe, ¿cómo puedo verificar si la carpeta existe con el nuevo 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
, y mucho menos cuando itera sobre las entradas de la carpeta.Respuestas:
Utilizando
java.nio.file.Files
:Opcionalmente, puede pasar los
LinkOption
valores de este método :También hay un método
notExists
:fuente
Files.exists(path)
yFiles.notExists(path)
pueden devolver falso al mismo tiempo! Esto significa que Java no pudo determinar si la ruta realmente existe.!Files.exists(path)
yFiles.notExists(path)
no son 100% lo mismo. Cuando Java no puede determinar si existe un archivo, el primero regresarátrue
y el segundo regresaráfalse
.Bastante sencillo:
Y si quieres estar seguro, es un directorio:
fuente
if(f.isDirectory()) {...}
sería suficiente, ya que comprueba también la existencia.java.io.file
no forma parte de las "nuevas características de Java 7 IO" a las que se refiere el OP. Eljava.nio.file
paquete, que se introdujo en Java 7, ofrece las clasesPaths
yFiles
. Otras respuestas aquí explican correctamente cómo usar estas clases más nuevas para resolver el problema de los OP.Para verificar si existe un directorio con el nuevo IO:
isDirectory
devuelvetrue
si el archivo es un directorio;false
si el archivo no existe, no es un directorio, o no se puede determinar si el archivo es un directorio o no.Ver: documentación .
fuente
Necesitas transformar tu Camino en una
File
prueba de existencia:fuente
Genere un archivo a partir de la cadena del directorio de su carpeta
y el método de uso existe.
Si desea generar la carpeta, debe usar mkdir ()
fuente
No es necesario llamar por separado al
exists()
método, yaisDirectory()
que verifica implícitamente si el directorio existe o no.fuente
fuente
fuente
Podemos verificar archivos y carpetas.
fuente
Desde SonarLint , si ya tiene la ruta, úsela en
path.toFile().exists()
lugar deFiles.exists
para un mejor rendimiento.Ejemplo de código no conforme:
Solución conforme:
fuente