웹 개발

Java - 특정 폴더의 이미지 파일 목록 가져오기

Blue_bull 2025. 2. 24. 18:03
package com.coffee.common;

import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;



public class GenerateData {
    // 윈도우 폴더 구분자는 \인데 특수 문자이므로 반드시 \\로 표기해야 합니다(역슬래쉬 두개가 자바에서는 역슬래쉬 하나이다).
    private static final String IMAGE_DIR = "c:\\boot\\images"; // 이미지가 있는 폴더 경로

    public static List<String> getImageFileNames() {
        //특정 폴더 내에 들어 있는 모든 이미지 파일을 문자열 List 형식으로 반환합니다.
        File folder = new File(IMAGE_DIR);
        List<String> imageFiles = new ArrayList<String>();

        if(folder.exists() == false && folder.isFile()){
            System.out.println("해당 폴더가 존재하지 않습니다" + IMAGE_DIR);
            return imageFiles;
        }

        //확장자가 다음 항목인 파일들만 추출
        String[] imageExtensions = {".jpg",".jpeg","png"};

        File[] fileList = folder.listFiles();

        for(File file : fileList){
            if (file.isFile() && Arrays.stream(imageExtensions)
                    .anyMatch(ext -> file.getName().toLowerCase().endsWith(ext))) {
                imageFiles.add(file.getName());
            }
        }

        return imageFiles;
    }
}

📌 GenerateData 클래스의 핵심 기능

1️⃣ 특정 폴더(c:\boot\images)에서 이미지 파일 목록을 가져옴
2️⃣ 확장자가 .jpg, .jpeg, .png인 파일만 필터링
3️⃣ 파일 이름들을 List<String> 형태로 반환


1️⃣ java.io.File (파일 및 폴더 조작)

🔹 File 클래스는 파일 및 디렉터리(폴더)를 관리하는 클래스
🔹 파일이 존재하는지, 디렉터리인지, 파일 목록을 가져오는 등의 기능을 제공

📌 사용된 메서드 정리

메서드 설명
new File(String path) 파일 또는 폴더를 나타내는 객체 생성
file.exists() 파일 또는 폴더가 존재하는지 확인 (true / false)
file.isFile() 해당 File 객체가 파일인지 확인 (true / false)
file.listFiles() 해당 폴더에 있는 모든 파일 및 하위 폴더 목록을 File[] 배열로 반환
file.getName() 파일 이름을 문자열로 반환

📌 예제

File folder = new File("c:\\boot\\images");

if (folder.exists()) {
    System.out.println("폴더가 존재합니다.");
    File[] files = folder.listFiles(); // 폴더 안의 파일 리스트 가져오기
    for (File file : files) {
        System.out.println("파일 이름: " + file.getName());
    }
} else {
    System.out.println("폴더가 존재하지 않습니다.");
}

2️⃣ java.util.ArrayList (리스트 저장)

🔹 ArrayList가변 크기의 리스트(배열)를 제공하는 클래스
🔹 여러 개의 값을 동적으로 저장하고 관리할 때 사용

📌 사용된 메서드 정리
| 메서드 | 설명 |
|--------|------|
| new ArrayList<>() | 빈 리스트 생성 |
| list.add(값) | 리스트에 요소 추가 |
| list.get(인덱스) | 특정 위치(인덱스)의 요소 가져오기 |
| list.size() | 리스트의 크기(요소 개수) 반환 |

📌 예제

List<String> imageFiles = new ArrayList<>();

imageFiles.add("dog.jpg");
imageFiles.add("cat.png");

System.out.println(imageFiles.get(0)); // 출력: dog.jpg
System.out.println(imageFiles.size()); // 출력: 2

3️⃣ java.util.Arrays (배열 관련 유틸리티)

🔹 Arrays 클래스는 배열 관련 기능을 제공하는 유틸리티 클래스
🔹 배열을 리스트로 변환, 정렬, 특정 조건 검사 등의 기능을 지원

📌 사용된 메서드 정리

메서드 설명
Arrays.stream(배열).anyMatch(조건) 배열에서 특정 조건을 만족하는 요소가 있는지 확인

📌 예제 (anyMatch() 활용)

String[] extensions = {".jpg", ".jpeg", ".png"};

boolean isImage = Arrays.stream(extensions)
        .anyMatch(ext -> "photo.jpg".toLowerCase().endsWith(ext));

System.out.println(isImage); // 출력: true (".jpg"가 확장자 목록에 포함되어 있음)

📌 이 코드가 하는 일

  • photo.jpg의 확장자가 ".jpg", ".jpeg", ".png" 중 하나인지 검사
  • true 또는 false 반환

4️⃣ java.util.List (리스트 인터페이스)

🔹 List순서가 있는 데이터 저장 구조 (인터페이스)
🔹 ArrayList, LinkedList 같은 클래스들이 List를 구현

📌 사용된 메서드 정리

메서드 설명
List.of(값, 값, 값) 불변 리스트 생성 (수정 불가능)
list.add(값) 리스트에 요소 추가
list.get(인덱스) 리스트에서 특정 요소 가져오기

📌 예제

List<String> names = List.of("Alice", "Bob", "Charlie");

System.out.println(names.get(1)); // 출력: Bob

📌 GenerateData 코드에서 사용된 라이브러리 정리표

패키지 클래스 설명
java.io File 파일 및 폴더 조작 (존재 여부 확인, 파일 목록 가져오기)
java.util ArrayList 가변 크기의 리스트 (파일명 저장용)
java.util Arrays 배열 관련 기능 제공 (anyMatch()로 확장자 검사)
java.util List 리스트 인터페이스 (데이터 저장)