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


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.File과java.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.