Periksa apakah jalur mewakili file atau folder

141

Saya memerlukan metode yang valid untuk memeriksa apakah Stringsuatu jalur mewakili file atau direktori. Apa nama direktori yang valid di Android? Ketika keluar, nama folder dapat berisi '.'karakter, jadi bagaimana sistem memahami apakah ada file atau folder?

Egor
sumber
2
"Bagaimana sistem memahami apakah ada file atau folder": Bagaimana sistem tidak mengerti? Itu ada di disk di sistem file dan itu adalah satu atau yang lain.
Marquis of Lorne

Jawaban:

203

Dengan asumsi pathadalah milik Anda String.

File file = new File(path);

boolean exists =      file.exists();      // Check if the file exists
boolean isDirectory = file.isDirectory(); // Check if it's a directory
boolean isFile =      file.isFile();      // Check if it's a regular file

Lihat FileJavadoc


Atau Anda dapat menggunakan kelas NIO Filesdan memeriksa hal-hal seperti ini:

Path file = new File(path).toPath();

boolean exists =      Files.exists(file);        // Check if the file exists
boolean isDirectory = Files.isDirectory(file);   // Check if it's a directory
boolean isFile =      Files.isRegularFile(file); // Check if it's a regular file
Baz
sumber
Seperti yang saya sebutkan dalam pertanyaan saya, saya hanya memiliki String dan tidak ada contoh File, dan saya tidak dapat membuatnya.
Egor
1
pathdalam contoh saya adalah String. Mengapa Anda tidak bisa membuat Fileinstance? Perhatikan bahwa ini tidak akan mengubah apa pun pada sistem file.
Baz
Berikut ini adalah contoh nyata, saya mencoba membuat File menggunakan jalur berikut: / mnt / sdcard / arc / root, dan untuk isDirectory () mengembalikan false. Apa masalahnya di sini?
Egor
@Egor Cukup sulit untuk mengatakannya, karena saya tidak memiliki perangkat Android. Catatan yang rootmungkin berupa file. File tidak harus memiliki .somethingekstensi.
Baz
10
Metode isDirectory () akan mengembalikan true hanya jika file ada dan itu adalah direktori. Jika file yang diberikan di path tidak ada maka itu juga mengembalikan false. Jadi isDirectory () akan mengembalikan false jika jalur yang diberikan tidak ada atau ada tetapi itu bukan direktori ... Harapan yang membantu ..
Praful Bhatnagar
50

Solusi bersih sambil tetap menggunakan API nio:

Files.isDirectory(path)
Files.isRegularFile(path)
pgsandstrom
sumber
Ini adalah jawaban yang lebih baik jika Anda mengulang daftar direktori. Di sini Anda menggunakan kelas statis untuk menjalankan pemeriksaan ini, daripada membuat Fileobjek baru setiap kali. Menghemat memori
Kervvv
2
Tidak menjawab pertanyaan yang diajukan. Files.isDirectory () tidak menerima sebuah String.
gerardw
21

Harap tempuh API nio untuk melakukan pemeriksaan ini

import java.nio.file.*;

static Boolean isDir(Path path) {
  if (path == null || !Files.exists(path)) return false;
  else return Files.isDirectory(path);
}
Sheng
sumber
2
Mengapa memberikan jawaban dalam Scala ketika pertanyaannya adalah meminta kode Java (lihat tag)?
Baz
6
@Baz Karena Scala kovarian ke Jawa ... hanya bercanda :-D. Saya telah memperbarui jawabannya.
Sheng
Anda dapat membuat direktori temp, membuat direktori dan file di sana. Kemudian gunakan kode di atas dan tegaskan. Di satu sisi, gunakan file / direktori biasa jika tidak, gunakan beberapa jalur tiruan dari item yang tidak dibuat.
Gondri
4
String path = "Your_Path";
File f = new File(path);

if (f.isDirectory()){



  }else if(f.isFile()){



  }
Kumar Vivek Mitra
sumber
3

Tidak ada cara bagi sistem untuk memberi tahu Anda jika suatu Stringmewakili fileatau directory, jika itu tidak ada dalam sistem file. Sebagai contoh:

Path path = Paths.get("/some/path/to/dir");
System.out.println(Files.isDirectory(path)); // return false
System.out.println(Files.isRegularFile(path)); // return false

Dan untuk contoh berikut:

Path path = Paths.get("/some/path/to/dir/file.txt");
System.out.println(Files.isDirectory(path));  //return false
System.out.println(Files.isRegularFile(path));  // return false

Jadi kita melihat bahwa dalam kedua kasus sistem mengembalikan false. Ini berlaku untuk keduanya java.io.Filedanjava.nio.file.Path

Emdadul Sawon
sumber
2

Untuk memeriksa apakah string mewakili jalur atau file secara terprogram, Anda harus menggunakan metode API seperti isFile(), isDirectory().

Bagaimana sistem memahami apakah ada file atau folder?

Saya kira, entri file dan folder disimpan dalam struktur data dan dikelola oleh sistem file.

Juvanis
sumber
0
   private static boolean isValidFolderPath(String path) {
    File file = new File(path);
    if (!file.exists()) {
      return file.mkdirs();
    }
    return true;
  }
Kaweesi Joseph
sumber
0
public static boolean isDirectory(String path) {
    return path !=null && new File(path).isDirectory();
}

Untuk menjawab pertanyaan secara langsung.

gerardw
sumber