Sprawdź, czy ścieżka reprezentuje plik lub folder

141

Potrzebuję prawidłowej metody, aby sprawdzić, czy a Stringreprezentuje ścieżkę do pliku lub katalogu. Jakie są prawidłowe nazwy katalogów w systemie Android? Jak się okazuje, nazwy folderów mogą zawierać '.'znaki, więc jak system rozumie, czy istnieje plik czy folder?

Egor
źródło
2
„W jaki sposób system rozpoznaje, czy istnieje plik czy folder”: Jak system może nie rozumieć? Znajduje się na dysku w systemie plików i jest jednym lub drugim.
Markiz Lorne

Odpowiedzi:

203

Zakładając, że pathjest twój 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

Zobacz FileJavadoc


Lub możesz skorzystać z klasy NIO Filesi sprawdzić takie rzeczy:

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
źródło
Jak wspomniałem w swoim pytaniu, mam tylko ciągi znaków i nie mam instancji File i nie mogę ich utworzyć.
Egor
1
pathw moim przykładzie jest String. Dlaczego nie możesz utworzyć Fileinstancji? Zauważ, że nie zmieni to niczego w systemie plików.
Baz
Oto konkretny przykład, próbuję utworzyć plik przy użyciu następującej ścieżki: / mnt / sdcard / arc / root, a dla isDirectory () zwraca false. O co tu chodzi?
Egor
@Egor Dość trudno powiedzieć, ponieważ nie mam urządzenia z Androidem. Zauważ, że rootmoże to być plik. Pliki nie muszą mieć .somethingrozszerzenia.
Baz
10
Metoda isDirectory () zwróci wartość true tylko wtedy, gdy plik istnieje i jest katalogiem. Jeśli plik podany w ścieżce nie istnieje, to również zwróci false. Więc isDirectory () zwróci false, jeśli podana ścieżka nie istnieje lub istnieje, ale nie jest katalogiem ... Mam nadzieję, że to pomoże ..
Praful Bhatnagar
50

Czyste rozwiązanie pozostając przy nio API:

Files.isDirectory(path)
Files.isRegularFile(path)
pgsandstrom
źródło
To lepsza odpowiedź, jeśli przeglądasz listę katalogów. Tutaj używasz klasy statycznej do uruchamiania tych testów, zamiast tworzenia za Filekażdym razem nowego obiektu. Oszczędza pamięć
Kervvv
2
Nie odpowiada na zadane pytanie. Files.isDirectory () nie akceptuje ciągu.
gerardw
21

Proszę trzymać się interfejsu API nio, aby przeprowadzić te testy

import java.nio.file.*;

static Boolean isDir(Path path) {
  if (path == null || !Files.exists(path)) return false;
  else return Files.isDirectory(path);
}
Sheng
źródło
2
Po co udzielać odpowiedzi w Scali, kiedy pytanie dotyczy kodu Java (zobacz tagi)?
Baz
6
@Baz Ponieważ Scala jest kowariantna w stosunku do Javy ... tylko żartuję :-D. Zaktualizowałem odpowiedź.
Sheng
Możesz stworzyć katalog tymczasowy, stworzyć tam katalogi i pliki. Następnie użyj powyższego kodu i potwierdź. Z jednej strony użyj zwykłych plików / katalogów, w przeciwnym razie użyj fałszywej ścieżki do elementu, który nie został utworzony.
Gondri,
4
String path = "Your_Path";
File f = new File(path);

if (f.isDirectory()){



  }else if(f.isFile()){



  }
Kumar Vivek Mitra
źródło
3

Nie ma sposobu, aby system powiedzieć, czy Stringreprezentuję filelub directory, jeżeli nie istnieje w systemie plików. Na przykład:

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

I na poniższy przykład:

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

Widzimy więc, że w obu przypadkach system zwrócił fałsz. Dotyczy to obu java.io.Fileijava.nio.file.Path

Emdadul Sawon
źródło
2

Aby sprawdzić, czy ciąg reprezentuje ścieżkę lub plik programowo, należy użyć metod API, takich jak isFile(), isDirectory().

W jaki sposób system rozpoznaje, czy istnieje plik czy folder?

Wydaje mi się, że wpisy plików i folderów są przechowywane w strukturze danych i są zarządzane przez system plików.

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

Aby odpowiedzieć bezpośrednio na pytanie.

gerardw
źródło