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


}

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)) {

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()) {
   ...
}

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 .


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

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

4

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


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

}

1
File sourceLoc=new File("/a/b/c/folderName");
boolean isFolderExisted=false;
sourceLoc.exists()==true?sourceLoc.isDirectory()==true?isFolderExisted=true:isFolderExisted=false:isFolderExisted=false;

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      
        }
    }
}

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
}
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.