hanker

Java - (Window/Linux) 디렉터리 목록 가져오기 본문

JAVA

Java - (Window/Linux) 디렉터리 목록 가져오기

hanker 2024. 9. 20. 18:32
반응형

특정 디렉터리 안에 위치한 디렉터리 리스트를 정렬해서 가져오는 코드를 알아보자. 

 

Java 1.8을 사용했고, 1.8 이전 버전 사용 예도 알아보자.

 

우선 특정 디렉터리(D:\\hanker)를 살펴보자.

디렉터리 7개와 파일 7개 있다. 이 중에서 디렉터리만 추출해보자.

public static void main(String[] args) throws Exception {
    // 특정 디렉터리 경로 설정
    String directoryPath = "D:\\hanker";

    File directory = new File(directoryPath);

    // 경로가 디렉터리인지 확인
    if (!directory.isDirectory()) {
        System.out.println("Not a directory: " + directoryPath);
        return;
    }

    // 디렉터리 안에 있는 디렉터리 목록 가져오기
    File[] directories = directory.listFiles(File::isDirectory);

    if (directories == null || directories.length == 0) {
        System.out.println("No directories found.");
        return;
    }

    // 마지막 수정 시간으로 디렉터리 목록 정렬
    Arrays.sort(directories, Comparator.comparingLong(File::lastModified).reversed());

    // 최신 디렉터리명 반환
    for(File file : directories){
        System.out.println(file.getName());
    }

}

 

위 코드를 실행시켜보면

이렇게 디렉터리만 추출되는게 확인된다. (리눅스 서버에서도 동일하게 사용하면 된다.)

 

여기까지가 1.8 버전에서 사용 예이고, 1.8 이전 버전에서 사용하는 법을 알아보자.

Comparator.comparingLong(),  reversed()  메서드는 1.8에서 추가된 메서드

메서드 참조 대신 인터페이스의 익명 구현체를 사용하여 실행시켜야 한다.

public static void main(String[] args) throws Exception {
    // 특정 디렉터리 경로 설정
    String directoryPath = "D:\\hanker";

    File directory = new File(directoryPath);

    // 경로가 디렉터리인지 확인
    if (!directory.isDirectory()) {
        System.out.println("Not a directory: " + directoryPath);
        return;
    }

    // 디렉터리 안에 있는 디렉터리 목록 가져오기
    File[] directories = directory.listFiles(new java.io.FileFilter() {
        @Override
        public boolean accept(File file) {
            return file.isDirectory();
        }
    });

    if (directories == null || directories.length == 0) {
        System.out.println("No directories found.");
        return;
    }

    // 마지막 수정 시간으로 디렉터리 목록 정렬
    Arrays.sort(directories, new Comparator<File>() {
        @Override
        public int compare(File f1, File f2) {
            return Long.compare(f2.lastModified(), f1.lastModified());
        }
    });

    // 최신 디렉터리명 반환
    for(File file : directories){
        System.out.println(file.getName());
    }
}

 

위 코드가 1.8 버전 이전에서도 사용가능한 코드이다. 

결과는 

동일하게 나온다.

 

 

끝.

반응형