본문 바로가기
JAVA

[File] 리눅스 파일 정렬(서버 파일 목록 정렬)

by amoomar 2025. 3. 20.
반응형

 

 

표출 화면

프로젝트 진행 중, 서버 내 " 공통문자열_자료구분번호_YYYYMMDDHH24mi "형식의 명명규칙을 가진 파일 가진 자료를 불러내어 js코드로 시계열 그래프를 생성해내는 로직을 구현하였다.

 

이때, Window OS인 로컬 환경에서는 파일명 기준 정렬(1. 자료 구분번호 기준 그룹화 / 2. 파일명 기준 오름차순)이 자동으로 적용되어 차트의 x범례가 시간기준으로 오름차순이 잘 적용된채 서버에서 반환되었다. 때문에 로직에 별도로 정렬 코드를 작성하지 않았는데, 문제가 발생하였다.

 

Linux OS인 운영 환경에서 동작 시, 자료 구분번호가 많아질 경우 서버에서 파일명 기준 정렬이 되지 않은 채 반환되어 차트의 시간이 뒤죽박죽된 채 표출되는 것이다.

 

문제 개선을 위해 리눅스 서버에서도 파일이 이름 기준으로 하여 오름차순 될 수 있도록 정렬 코드를 추가하였다.

 

// 파일명 기준 정렬
Arrays.sort(files, new Comparator<File>() {
    public int compare(File f1, File f2) {
        return f1.getName().compareTo(f2.getName());
    }
});

Comparator 내부 익명클래스를 호출하여, 오름차순 정렬을 진행하였다.

 

위 코드를 폴더의 파일리스트를 불러온 바로 다음 구간에 추가하여, 이후의 조회 파일 분기로직을 문제없이 탈 수 있도록 하였다.

 

예시는 아래와 같다.

import java.io.File;
import java.util.Arrays;
import java.util.Comparator;

public class FileSortTest {
    public static void main(String[] args) {
        // 🔹 테스트할 디렉터리 경로 (실제 경로로 변경하세요!)
        String directoryPath = "C:\\테스트폴더"; // Windows 환경 예제
        // String directoryPath = "/home/user/test"; // Linux 환경 예제

        File folder = new File(directoryPath);
        File[] files = folder.listFiles();

        if (files == null || files.length == 0) {
            System.out.println("❌ 해당 폴더에 파일이 없거나 존재하지 않습니다.");
            return;
        }

        // 🔥 JDK 1.6 & 1.8 모두 호환되는 정렬 코드
        Arrays.sort(files, new Comparator<File>() {
            public int compare(File f1, File f2) {
                return f1.getName().compareTo(f2.getName()); // 파일명 오름차순 정렬
            }
        });

        // 🔹 정렬 후 파일 목록 출력
        System.out.println("✅ 정렬된 파일 목록:");
        for (File file : files) {
            System.out.println(file.getName());
        }
    }
}

 

 

 

코드 추가 후 운영 환경에서도 정상적으로 파일명 기준 정렬된 파일 목록으로 시계열 그래프가 정상 표출 되었다!

 

 

반응형