2026년 1월 13일 화요일

파일 쓰기11

 import org.apache.ibatis.session.SqlSession;

import org.apache.ibatis.session.SqlSessionFactory;

import java.io.BufferedWriter;

import java.io.FileOutputStream;

import java.io.OutputStreamWriter;

import java.nio.charset.StandardCharsets;

import java.util.List;

import java.util.Map;


public class BackOfficeService {


    private SqlSessionFactory sqlSessionFactory;


    public void exportTableToCsv(String fileName) {

        // SQL ID (Mapper XML에 정의된 ID)

        String statement = "com.example.mapper.AdminMapper.selectUserList";


        // 1. try-with-resources로 SqlSession과 Writer를 선언 (블록 종료 시 자동 close)

        try (SqlSession session = sqlSessionFactory.openSession();

             FileOutputStream fos = new FileOutputStream(fileName);

             OutputStreamWriter osw = new OutputStreamWriter(fos, StandardCharsets.UTF_8);

             BufferedWriter writer = new BufferedWriter(osw)) {


            // 2. 데이터 조회 (직관적인 조인을 선호하시니 결과는 Map 리스트로 수신)

            List<Map<String, Object>> rows = session.selectList(statement);


            // 3. 헤더 작성 (첫 번째 행의 Key셋을 활용하거나 직접 입력)

            if (!rows.isEmpty()) {

                writer.write("회원번호,아이디,성함,가입일");

                writer.newLine();

            }


            // 4. 데이터 반복문 처리

            for (Map<String, Object> row : rows) {

                // 각 컬럼 값을 직관적으로 가져와서 조합

                String line = String.format("%s,%s,%s,%s",

                        row.get("USER_ID"),

                        row.get("LOGIN_ID"),

                        row.get("USER_NAME"),

                        row.get("CREATED_AT"));

                

                writer.write(line);

                writer.newLine();

            }


            writer.flush(); // 잔여 데이터 출력

            System.out.println("파일 생성이 완료되었습니다: " + fileName);


        } catch (Exception e) {

            // 에러 발생 시 로그 출력 및 리소스는 자동 종료됨

            System.err.println("데이터 추출 중 오류 발생: " + e.getMessage());

            e.printStackTrace();

        }

    }

}


import java.io.BufferedWriter;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardOpenOption;
import java.util.List;
import java.util.Map;

public void writeResult(String dirPath, List<Map<String, Object>> resultList) throws Exception {

    Path directory = Paths.get(dirPath);
    Files.createDirectories(directory);

    String fileName = "result_" +
            java.time.LocalDateTime.now()
                    .format(java.time.format.DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))
            + ".tmp";

    Path filePath = directory.resolve(fileName);

    try (BufferedWriter writer = Files.newBufferedWriter(
            filePath,
            StandardOpenOption.CREATE,
            StandardOpenOption.TRUNCATE_EXISTING
    )) {
        for (Map<String, Object> row : resultList) {
            writer.write(
                row.values().stream()
                        .map(String::valueOf)
                        .reduce((a, b) -> a + "," + b)
                        .orElse("")
            );
            writer.newLine();
        }
    }
}


public void writeUsers(String dirPath, List<User> users) throws Exception {

    Path dir = Paths.get(dirPath);
    Files.createDirectories(dir);

    Path filePath = dir.resolve(
        "users_" +
        java.time.LocalDateTime.now()
            .format(java.time.format.DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))
        + ".tmp"
    );

    try (BufferedWriter writer = Files.newBufferedWriter(
            filePath,
            StandardOpenOption.CREATE,
            StandardOpenOption.TRUNCATE_EXISTING
    )) {
        for (User u : users) {
            writer.write(u.getId() + "," + u.getName() + "," + u.getAge());
            writer.newLine();
        }
    }
}

댓글 없음: