Cómo verificar si existe una carpeta

199

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());
    }


}
Al Phaba
fuente
2
Me pregunto por qué querrías verificar si la carpeta existe. El hecho de que la carpeta exista cuando lo marcó no significa que exista cuando crea el archivo DirectoryStream, y mucho menos cuando itera sobre las entradas de la carpeta.
Oswald
posible duplicado de la nueva API de IO
Mr_and_Mrs_D

Respuestas:

262

Utilizando java.nio.file.Files:

Path path = ...;

if (Files.exists(path)) {
    // ...
}

Opcionalmente, puede pasar los LinkOptionvalores de este método :

if (Files.exists(path, LinkOption.NOFOLLOW_LINKS)) {

También hay un método notExists:

if (Files.notExists(path)) {
Jesper
fuente
30
Además, tenga en cuenta que ambos Files.exists(path)y Files.notExists(path)pueden devolver falso al mismo tiempo! Esto significa que Java no pudo determinar si la ruta realmente existe.
Sanchit
O_O @Sanchit, ¿tienes algún argumento fuerte para decirlo?
Richard
66
La documentación lo dice. :) enlace Compruebe que el método notExists realmente no puede vincularlo correctamente.
Sanchit
13
Files.isDirectory (Path, LinkOption);
Kanagavelu Sugumar
2
@LoMaPh !Files.exists(path)y Files.notExists(path)no son 100% lo mismo. Cuando Java no puede determinar si existe un archivo, el primero regresará truey el segundo regresará false.
Jesper
205

Bastante sencillo:

new File("/Path/To/File/or/Directory").exists();

Y si quieres estar seguro, es un directorio:

File f = new File("/Path/To/File/or/Directory");
if (f.exists() && f.isDirectory()) {
   ...
}
Chris Cooper
fuente
40
respuesta correcta, pero un pequeño aviso: if(f.isDirectory()) {...}sería suficiente, ya que comprueba también la existencia.
G. Demecki
3
Esto no responde a la pregunta del OP. java.io.fileno forma parte de las "nuevas características de Java 7 IO" a las que se refiere el OP. El java.nio.filepaquete, que se introdujo en Java 7, ofrece las clases Pathsy Files. Otras respuestas aquí explican correctamente cómo usar estas clases más nuevas para resolver el problema de los OP.
Doron Gold
53

Para verificar si existe un directorio con el nuevo IO:

if (Files.isDirectory(Paths.get("directory"))) {
  ...
}

isDirectorydevuelve truesi el archivo es un directorio; falsesi el archivo no existe, no es un directorio, o no se puede determinar si el archivo es un directorio o no.

Ver: documentación .

Fernando Correia
fuente
6

Necesitas transformar tu Camino en una Fileprueba de existencia:

for(Path entry: stream){
  if(entry.toFile().exists()){
    log.info("working on file " + entry.getFileName());
  }
}
bvidal
fuente
5

Genere un archivo a partir de la cadena del directorio de su carpeta

String path="Folder directory";    
File file = new File(path);

y el método de uso existe.
Si desea generar la carpeta, debe usar mkdir ()

if (!file.exists()) {
            System.out.print("No Folder");
            file.mkdir();
            System.out.print("Folder created");
        }
Jose medina
fuente
4

No es necesario llamar por separado al exists()método, ya isDirectory()que verifica implícitamente si el directorio existe o no.

kanbagoly
fuente
4
import java.io.File;
import java.nio.file.Paths;

public class Test
{

  public static void main(String[] args)
  {

    File file = new File("C:\\Temp");
    System.out.println("File Folder Exist" + isFileDirectoryExists(file));
    System.out.println("Directory Exists" + isDirectoryExists("C:\\Temp"));

  }

  public static boolean isFileDirectoryExists(File file)

  {
    if (file.exists())
    {
      return true;
    }
    return false;
  }

  public static boolean isDirectoryExists(String directoryPath)

  {
    if (!Paths.get(directoryPath).toFile().isDirectory())
    {
      return false;
    }
    return true;
  }

}
Nadhu
fuente
1
File sourceLoc=new File("/a/b/c/folderName");
boolean isFolderExisted=false;
sourceLoc.exists()==true?sourceLoc.isDirectory()==true?isFolderExisted=true:isFolderExisted=false:isFolderExisted=false;
Arun Kumar Mudraboyina
fuente
sourceLoc.isDirectory () devuelve el resultado booleano. No es necesario usar "sourceLoc.isDirectory () == true"
Oleg Ushakov
1

Podemos verificar archivos y carpetas.

import java.io.*;
public class fileCheck
{
    public static void main(String arg[])
    {
        File f = new File("C:/AMD");
        if (f.exists() && f.isDirectory()) {
        System.out.println("Exists");
        //if the file is present then it will show the msg  
        }
        else{
        System.out.println("NOT Exists");
        //if the file is Not present then it will show the msg      
        }
    }
}
Akib Bagwan
fuente
Parece que no funciona con un archivo compartido de red. Atrapado: org.codehaus.groovy.runtime.typehandling.GroovyCastException: No se puede emitir el objeto 'Z: \\ tierWe bServices \ Deploy \ new.txt' con la clase 'org.codehaus.groovy.runtime.GStringImpl' a la clase 'java.nio .fi le.Path 'org.codehaus.groovy.runtime.typehandling.GroovyCastException: No se puede convertir el objeto' Z: \\ tierWebService s \ Deploy \ new.txt 'con la clase' org.codehaus.groovy.runtime.GStringImpl 'a la clase 'java.nio.file.Path'
Jirong Hu
0

Desde SonarLint , si ya tiene la ruta, úsela enpath.toFile().exists() lugar de Files.existspara un mejor rendimiento.

El Files.existsmétodo tiene un rendimiento notablemente pobre en JDK 8 y puede ralentizar una aplicación significativamente cuando se usa para verificar archivos que realmente no existen.

Lo mismo vale para Files.notExists, Files.isDirectoryy Files.isRegularFile.

Ejemplo de código no conforme:

Path myPath;
if(java.nio.Files.exists(myPath)) {  // Noncompliant
    // do something
}

Solución conforme:

Path myPath;
if(myPath.toFile().exists())) {
    // do something
}
MasterHD
fuente