특정 파일의 상위 디렉토리 이름을 얻는 방법


111

dddtest.java가있는 경로 이름에서 가져 오는 방법 .

File file = new File("C:/aaa/bbb/ccc/ddd/test.java");

1
일반 파일 용입니까, 아니면 소스 파일의 상위 디렉토리를 가져 오려고합니까? 후자의 경우 Java 컴파일을 이해하지 못합니다. 런타임 test.java에는 프로그램이 실행되는 컴퓨터에도 존재하지 않을 것입니다. .class실행 되는 컴파일 된 파일입니다. 따라서 이것은 ddd위치 를 알고있는 경우에만 작동합니다 .이 경우 프로그래밍 방식으로 찾을 필요가 없습니다. 그냥 하드 코딩하세요.
Mark Peters

답변:


141

사용 FilegetParentFile()방법String.lastIndexOf()검색 할 단지 바로 위 부모 디렉토리를.

Mark의 의견은 다음보다 더 나은 솔루션입니다 lastIndexOf().

file.getParentFile().getName();

이러한 솔루션은 파일에 상위 파일이있는 경우에만 작동합니다 (예 : 상위 파일 생성자 중 하나를 통해 생성됨 File). getParentFile()null 일 때 를 사용 lastIndexOf하거나 Apache CommonsFileNameUtils.getFullPath() 와 같은 것을 사용해야합니다 .

FilenameUtils.getFullPathNoEndSeparator(file.getAbsolutePath());
=> C:/aaa/bbb/ccc/ddd

접두사 및 후행 구분 기호를 유지 / 삭제하는 몇 가지 변형이 있습니다. 동일한 FilenameUtils클래스를 사용하여 결과에서 이름을 가져 오거나 를 사용할 수 있습니다 lastIndexOf.


14
당신은 필요하지 않습니다 lastIndexOf, 단지 사용 file.getParentFile().getName().
Mark Peters

13
만일을 위해. 반환 null되면 ( File상대 경로로 인스턴스 를 만든 경우)-시도하십시오 file.getAbsoluteFile().getParentFile().getName().
nidu

1
@MarkPeters 파일이 부모 파일로 생성되었을 때만 작동하지만 비교적 드물다고 생각합니다.
Dave Newton

20
File f = new File("C:/aaa/bbb/ccc/ddd/test.java");
System.out.println(f.getParentFile().getName())

f.getParentFile() null 일 수 있으므로 확인해야합니다.


1
그냥 확인, 출력은 다음됩니다 : C : / AAA / BBB / CCC / DDD
가이 아브라함

16

아래 사용,

File file = new File("file/path");
String parentPath = file.getAbsoluteFile().getParent();

이 메서드에는 기본 파일이없는 경우에도 부모 집합이 있어야한다는 점을 지적 할 가치가 있습니다.
Pace

13

Java 7에는 새로운 Paths api가 있습니다. 가장 현대적이고 깨끗한 솔루션은 다음과 같습니다.

Paths.get("C:/aaa/bbb/ccc/ddd/test.java").getParent().getFileName();

결과는 다음과 같습니다.

C:/aaa/bbb/ccc/ddd

5

String 경로 만 있고 새 File 객체를 만들고 싶지 않은 경우 다음과 같이 사용할 수 있습니다.

public static String getParentDirPath(String fileOrDirPath) {
    boolean endsWithSlash = fileOrDirPath.endsWith(File.separator);
    return fileOrDirPath.substring(0, fileOrDirPath.lastIndexOf(File.separatorChar, 
            endsWithSlash ? fileOrDirPath.length() - 2 : fileOrDirPath.length() - 1));
}

4
이미 루트 위치에있는 경우 ArrayOutOfBoundsException이 발생합니다.- "/"
Jnmgr

2
File file = new File("C:/aaa/bbb/ccc/ddd/test.java");
File curentPath = new File(file.getParent());
//get current path "C:/aaa/bbb/ccc/ddd/"
String currentFolder= currentPath.getName().toString();
//get name of file to string "ddd"

다른 경로를 사용하여 "ddd"폴더를 추가해야하는 경우;

String currentFolder= "/" + currentPath.getName().toString();

1

Java 7부터 Path를 사용하는 것을 선호합니다. 경로를 다음 위치에만 입력하면됩니다.

Path dddDirectoryPath = Paths.get("C:/aaa/bbb/ccc/ddd/test.java");

get 메서드를 만듭니다.

public String getLastDirectoryName(Path directoryPath) {
   int nameCount = directoryPath.getNameCount();
   return directoryPath.getName(nameCount - 1);
}

0

Groovy에서 :

Filegroovy에서 문자열을 구문 분석 하기 위해 인스턴스 를 만들 필요가 없습니다 . 다음과 같이 수행 할 수 있습니다.

String path = "C:/aaa/bbb/ccc/ddd/test.java"
path.split('/')[-2]  // this will return ddd

분할은 배열을 생성 [C:, aaa, bbb, ccc, ddd, test.java]하고 인덱스 -2는 마지막 항목 이전의 항목을 가리 킵니다.이 경우에는ddd


0
    //get the parentfolder name
    File file = new File( System.getProperty("user.dir") + "/.");
    String parentPath = file.getParentFile().getName();
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.