Bir yolun bir dosyayı veya klasörü temsil edip etmediğini kontrol edin


141

Ben bir Stringdosya veya dizin için bir yolu temsil edip etmediğini kontrol etmek için geçerli bir yöntem gerekir . Android'de geçerli dizin adları nedir? Ortaya çıktıkça, klasör adları '.'karakter içerebilir , bu nedenle sistem bir dosya veya klasör olup olmadığını nasıl anlar?


2
Nasıl sistem olabilir: "Nasıl sistem bir dosya veya klasörü olup olmadığını anlamaya yok" değil anladın mı? Dosya sistemindeki diskte var ve biri ya da diğeri.
Lorne Marquis

Yanıtlar:


203

Varsaymak pathsenin 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

Bkz. FileJavadoc


Veya NIO sınıfını kullanabilir Filesve bunun gibi şeyleri kontrol edebilirsiniz:

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

Sorumda belirttiğim gibi, sadece Dizelerim var ve Dosya örnekleri yok ve bunları oluşturamıyorum.
Egor

1
pathbenim örneğimde String. Neden bir Fileörnek oluşturamıyorsunuz ? Bunun dosya sistemindeki hiçbir şeyi değiştirmeyeceğini unutmayın.
Baz

İşte somut bir örnek, aşağıdaki yolu kullanarak bir Dosya oluşturmaya çalışıyorum: / mnt / sdcard / arc / root ve isDirectory () için false döndürür. Burada sorun ne?
Egor

@Egor Android cihazım olmadığı için söylemek zor. Bunun rootbir dosya olabileceğini unutmayın . Dosyaların bir .somethinguzantısı olması gerekmez .
Baz

10
isDirectory () yöntemi yalnızca dosya varsa ve bir dizinse true değerini döndürür. Yolda verilen dosya yoksa, yanlış döndürür. Yani verilen yol yoksa veya mevcutsa, bu bir dizin değilse
isDirectory

50

Nio API ile kalırken temiz çözüm:

Files.isDirectory(path)
Files.isRegularFile(path)

Bir dizin listesi üzerinde döngü yapıyorsanız, bu daha iyi bir yanıttır. Burada, Fileher seferinde yeni bir nesne oluşturmak yerine, bu kontrolleri çalıştırmak için statik bir sınıf kullanıyorsunuz . Bellek
tasarrufu

2
Sorulan soruya cevap vermiyor. Files.isDirectory () bir String kabul etmez.
gerardw

21

Bu kontrolleri yapmak için lütfen nio API'sine sadık kalın

import java.nio.file.*;

static Boolean isDir(Path path) {
  if (path == null || !Files.exists(path)) return false;
  else return Files.isDirectory(path);
}

2
Soru Java kodunu sorurken neden Scala'da bir cevap verin (etiketlere bakın)?
Baz

6
@Baz Scala Java için kovaryant olduğu için ... şaka yapıyorum :-D. Cevabı güncelledim.
Sheng

Temp dizini oluşturabilir, orada dizinler ve dosyalar oluşturabilirsiniz. Sonra yukarıdaki kodu kullanın ve iddia edin. Bir yandan normal dosyaları / dizinleri kullanın, aksi takdirde yaratılmamış bazı kukla yol kullanın.
Gondri

4
String path = "Your_Path";
File f = new File(path);

if (f.isDirectory()){



  }else if(f.isFile()){



  }

3

Sistem bir eğer söylemek için bir yolu yoktur Stringbir temsil fileya directoryda eğer yoksa dosya sisteminde. Örneğin:

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

Ve aşağıdaki örnek için:

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

Yani her iki durumda da sistemin yanlış döndüğünü görüyoruz. Bu ikisi için de geçerlidir java.io.Filevejava.nio.file.Path


2

Bir dizenin bir yolu veya dosyayı programlı olarak temsil edip etmediğini kontrol etmek için aşağıdaki gibi API yöntemlerini kullanmalısınız isFile(), isDirectory().

Sistem bir dosya veya klasör olup olmadığını nasıl anlar?

Sanırım, dosya ve klasör girişleri bir veri yapısında tutulur ve dosya sistemi tarafından yönetilir.


0
   private static boolean isValidFolderPath(String path) {
    File file = new File(path);
    if (!file.exists()) {
      return file.mkdirs();
    }
    return true;
  }

0
public static boolean isDirectory(String path) {
    return path !=null && new File(path).isDirectory();
}

Soruyu doğrudan cevaplamak için.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.