Come verificare se esiste una cartella


199

Sto giocando un po 'con le nuove funzionalità di Java 7 IO, in realtà sto provando a ricevere tutti i file XML di una cartella. Ma questo genera un'eccezione quando la cartella non esiste, come posso verificare se la cartella esiste con il nuovo 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
Mi chiedo perché vorresti controllare se la cartella esiste. Solo perché la cartella esiste quando si seleziona non significa che la cartella esiste quando si crea il DirectoryStream, figuriamoci quando si scorre le voci della cartella.
Oswald,

possibile duplicato della nuova API IO
Mr_and_Mrs_D

Risposte:


262

Utilizzando java.nio.file.Files:

Path path = ...;

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

È possibile facoltativamente passare i LinkOptionvalori di questo metodo :

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

C'è anche un metodo notExists:

if (Files.notExists(path)) {

30
Inoltre, nota che entrambi Files.exists(path)e Files.notExists(path)possono restituire false allo stesso tempo! Ciò significa che Java non è stato in grado di determinare se il percorso esiste effettivamente.
Sanchit,

O_O @Sanchit hai qualche argomento forte per dirlo?
Richard,

6
Lo dice la documentazione. :) link Controlla che il metodo notExists non riesca davvero a collegarlo correttamente.
Sanchit,

13
Files.isDirectory (Path, LinkOption);
Kanagavelu Sugumar,

2
@LoMaPh !Files.exists(path)e Files.notExists(path)non sono la stessa cosa al 100%. Quando Java non è in grado di determinare se esiste un file, il primo tornerà truee il secondo ritornerà false.
Jesper,

205

Abbastanza semplice:

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

E se vuoi essere sicuro che sia una directory:

File f = new File("/Path/To/File/or/Directory");
if (f.exists() && f.isDirectory()) {
   ...
}

40
risposta corretta, ma un piccolo avviso: if(f.isDirectory()) {...}sarebbe sufficiente, in quanto controlla anche l'esistenza.
G. Demecki,

3
Ciò non risponde alla domanda del PO. java.io.filenon fa parte delle "nuove funzionalità di Java 7 IO" cui si riferisce l'OP. Il java.nio.filepacchetto, introdotto in Java 7, offre le classi Pathse Files. Altre risposte qui spiegano correttamente come utilizzare queste nuove classi per risolvere il problema dei PO.
Doron Gold

53

Per verificare se esiste una directory con il nuovo IO:

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

isDirectoryritorna truese il file è una directory;falsese il file non esiste, non è una directory o non è possibile determinare se il file è una directory o meno.

Vedi: documentazione .


6

Devi trasformare il tuo percorso in a Filee verificare l'esistenza:

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

5

Generare un file dalla stringa della directory della cartella

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

e esiste un metodo di utilizzo.
Se vuoi generare la cartella puoi usare mkdir ()

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

4

Non è necessario chiamare separatamente il exists()metodo, poiché isDirectory()controlla implicitamente se la directory esiste o meno.


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 () restituisce risultati booleani. Non è necessario utilizzare "sourceLoc.isDirectory () == true"
Oleg Ushakov

1

Siamo in grado di controllare file e cartelle thire.

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

Sembra non funzionare con un file condiviso di rete. Catturato: org.codehaus.groovy.runtime.typehandling.GroovyCastException: impossibile eseguire il cast dell'oggetto 'Z: \\ tierWe bServices \ Deploy \ new.txt' con classe 'org.codehaus.groovy.runtime.GStringImpl' to class 'java.nio .fi le.Path 'org.codehaus.groovy.runtime.typehandling.GroovyCastException: impossibile eseguire il cast dell'oggetto' Z: \\ tierWebService s \ Deploy \ new.txt 'con la classe' org.codehaus.groovy.runtime.GStringImpl 'alla classe 'java.nio.file.Path'
Jirong Hu,

0

Da SonarLint , se hai già il percorso, usa path.toFile().exists()invece di Files.existsper prestazioni migliori.

Il Files.existsmetodo ha prestazioni notevolmente scarse in JDK 8 e può rallentare un'applicazione in modo significativo quando viene utilizzata per controllare i file che in realtà non esistono.

Lo stesso vale per Files.notExists, Files.isDirectorye Files.isRegularFile.

Esempio di codice non conforme:

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

Soluzione conforme:

Path myPath;
if(myPath.toFile().exists())) {
    // do something
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.