경로가 파일 또는 폴더를 나타내는 지 확인


141

Stringa가 파일 또는 디렉토리의 경로를 나타내는 지 확인하는 유효한 방법이 필요합니다 . Android에서 유효한 디렉토리 이름은 무엇입니까? 폴더 이름에는 '.'문자 가 포함될 수 있으므로 시스템은 파일이나 폴더가 있는지 어떻게 이해합니까?


2
어떻게 시스템이 있습니다 : "어떻게 시스템은 파일이나 폴더가 있는지 여부 이해 않는다" 하지 이해? 파일 시스템의 디스크에 있으며 둘 중 하나입니다.
Lorne의 후작

답변:


203

가정 path은 당신 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

Javadoc 참조File


또는 NIO 클래스를 사용하여 다음을 확인할 수 있습니다 Files.

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

내 질문에서 언급했듯이 Strings 만 있고 File 인스턴스가 없으며 만들 수 없습니다.
Egor

1
path내 예에서는 String입니다. 왜 File인스턴스 를 만들 수 없습니까? 파일 시스템의 내용은 변경되지 않습니다.
Baz

구체적인 예는 다음과 같습니다. / mnt / sdcard / arc / root 경로를 사용하여 File을 만들려고하고 isDirectory ()의 경우 false를 반환합니다. 여기서 무슨 문제가 있습니까?
Egor

@Egor 안드로이드 기기가 없기 때문에 말하기가 어렵습니다. 참고 root파일 일 수도있다. 파일 .something확장자 가 반드시 필요한 것은 아닙니다 .
Baz

10
isDirectory () 메소드는 파일이 존재하고 디렉토리 인 경우에만 true를 리턴합니다. 경로에 지정된 파일이 존재하지 않으면 false도 리턴합니다. 주어진 경로하지 않는 존재하거나 존재하지만 .. 도움이 디렉토리 ... 희망이 아닌 경우는 ()가 false를 반환 isDirectory 그래서
Praful Bhatnagar

50

nio API를 유지하면서 깨끗한 솔루션 :

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

디렉토리 목록을 반복하는 경우 더 나은 대답입니다. 여기서는 File매번 새 객체를 만드는 대신 정적 클래스를 사용하여 이러한 검사를 실행합니다 . 메모리 절약
Kervvv

2
묻는 질문에 대답하지 않습니다. Files.isDirectory () 는 문자열을 허용하지 않습니다.
gerardw

21

이러한 확인을 수행하려면 nio API를 따르십시오.

import java.nio.file.*;

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

2
질문이 Java 코드를 요청할 때 왜 Scala에 답변을 제공합니까 (태그 참조)?
Baz

6
@Baz 스칼라는 자바와 공변하기 때문에 농담 :-D입니다. 답변을 업데이트했습니다.
Sheng

임시 디렉토리를 작성하고 디렉토리 및 파일을 작성할 수 있습니다. 그런 다음 위의 코드를 사용하여 주장하십시오. 한편으로는 일반 파일 / 디렉토리를 사용하지 않으면 작성되지 않은 일부 더미 경로를 사용하십시오.
Gondri


3

또는 Stringa 가 파일 시스템에 존재하지 않는 경우 시스템이 알려줄 수있는 방법이 없습니다 . 예를 들면 다음과 같습니다.filedirectory

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

그리고 다음 예제의 경우 :

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

따라서 두 경우 모두 시스템이 false를 반환합니다. 이것은 모두 사실 java.io.Filejava.nio.file.Path


2

문자열이 프로그래밍 방식으로 경로 또는 파일을 나타내는 지 확인하려면 다음과 같은 API 메소드를 사용해야합니다 isFile(), isDirectory().

파일이나 폴더가 있는지 시스템이 어떻게 이해합니까?

파일 및 폴더 항목은 데이터 구조로 유지되며 파일 시스템에서 관리합니다.


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();
}

질문에 직접 대답하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.