Cara memeriksa apakah ada folder


199

Saya bermain sedikit dengan fitur Java 7 IO baru, sebenarnya saya mencoba untuk menerima semua file xml folder. Tapi ini melempar pengecualian ketika folder tidak ada, bagaimana saya bisa memeriksa apakah folder tersebut ada dengan IO baru?

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
Saya ingin tahu mengapa Anda ingin memeriksa apakah folder itu ada. Hanya karena folder ada ketika Anda memeriksa bukan berarti folder itu ada saat Anda membuat DirectoryStream, apalagi ketika Anda mengulangi entri folder.
Oswald

Jawaban:


262

Menggunakan java.nio.file.Files:

Path path = ...;

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

Anda bisa memberikan LinkOptionnilai metode ini secara opsional :

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

Ada juga metode notExists:

if (Files.notExists(path)) {

30
Juga, perhatikan bahwa keduanya Files.exists(path)dan Files.notExists(path)dapat mengembalikan false pada saat yang sama! Ini berarti bahwa Java tidak dapat menentukan apakah path tersebut benar-benar ada.
Sanchit

O_O @Sanchit Anda punya argumen kuat untuk mengatakannya?
Richard

6
Dokumentasi mengatakan demikian. :) tautan Periksa metode notExists tidak dapat benar-benar menautkannya dengan benar.
Sanchit

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

2
@ LoMaPh !Files.exists(path)dan Files.notExists(path)bukan 100% hal yang sama. Ketika Java tidak dapat menentukan apakah suatu file ada, yang pertama akan kembali truedan yang kedua akan kembali false.
Jesper

205

Cukup sederhana:

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

Dan jika Anda ingin memastikan itu adalah direktori:

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

40
jawaban yang benar, tetapi pemberitahuan kecil: if(f.isDirectory()) {...}akan cukup, karena memeriksa juga keberadaan.
G. Demecki

3
Ini tidak menjawab pertanyaan OP. java.io.filebukan bagian dari "fitur Java 7 IO baru" yang dimaksud OP. The java.nio.filepaket, yang diperkenalkan di Jawa 7, menawarkan Pathsdan Fileskelas. Jawaban lain di sini menjelaskan dengan benar bagaimana menggunakan kelas-kelas yang lebih baru ini untuk menyelesaikan masalah OP.
Doron Gold

53

Untuk memeriksa apakah ada direktori dengan IO baru:

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

isDirectorykembali truejika file tersebut adalah direktori; falsejika file tidak ada, bukan direktori, atau tidak dapat ditentukan apakah file tersebut direktori atau tidak.

Lihat: dokumentasi .


6

Anda perlu mengubah Jalan Anda menjadi Filedan menguji keberadaan:

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

5

Buat file dari string direktori folder Anda

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

dan menggunakan metode yang ada.
Jika Anda ingin membuat folder, Anda harus menggunakan mkdir ()

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

4

Tidak perlu memanggil exists()metode secara terpisah , karena isDirectory()secara implisit memeriksa apakah direktori tersebut ada atau tidak.


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 () mengembalikan hasil boolean. Tidak perlu menggunakan "sourceLoc.isDirectory () == true"
Oleg Ushakov

1

Kami dapat memeriksa file dan Folder mereka.

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

Tampaknya tidak berfungsi dengan file yang dibagikan jaringan. Tertangkap: org.codehaus.groovy.runtime.typehandling.GroovyCastException: Tidak dapat membuang objek 'Z: \\ tierWe bServices \ Deploy \ new.txt' with class 'org.codehaus.groovy.runtime.GStringImpl' ke kelas 'java.nio .fi le.Path 'org.codehaus.groovy.runtime.typehandling.GroovyCastException: Tidak dapat membuang objek' Z: \\ tierWebService s \ Deploy \ new.txt 'dengan kelas' org.codehaus.groovy.runtime.GStringImpl 'ke kelas 'java.nio.file.Path'
Jirong Hu

0

Dari SonarLint , jika Anda sudah memiliki jalur, gunakan path.toFile().exists()alih-alih Files.existsuntuk kinerja yang lebih baik.

The Files.existsmetode memiliki kinerja yang terasa miskin di JDK 8, dan dapat memperlambat aplikasi secara signifikan ketika digunakan untuk memeriksa file yang tidak benar-benar ada.

Hal yang sama berlaku untuk Files.notExists, Files.isDirectorydan Files.isRegularFile.

Contoh Kode Tidak Patuh:

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

Solusi yang Sesuai:

Path myPath;
if(myPath.toFile().exists())) {
    // do something
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.