[Java] 파일 생성, 읽기 및 캐릭터셋(UTF-8) 설정

    자바로 파일을 생성하는 방법은 다양하게 많지만 그 중 가장 범용적이고, 성능도 뛰어난 방법을 소개해보고자 한다. 

     

    [Java] 파일 생성, 읽기 및 캐릭터셋(UTF-8) 설정


    테스트를 위한 String 생성

    public static void main(String args[]) throws Exception {
            List<String> sampleList = new ArrayList<>();
            for(int i = 0; i < 10; i++) {
                sampleList.add("test-" + i);
    	}
    }

    테스트를 위해서 10번의 루트를 실행하며, test-0 ~ test-9까지 문자열을 생성하고 sampleList 스트링 리스트 변수에 문자열 값들을 저장한다.

     

    파일 생성 메소드

    public static boolean createTextFile(String filePath, List<String> sampleList) {
        BufferedWriter bw = null;
        try {
            bw = new BufferedWriter(new FileWriter(filePath));
    
            for(String sampleStr : sampleList) {
                bw.write(sampleStr);
                bw.newLine();
            }
    
            bw.close();
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
    
        return true;
    }

    bw.newLine()은 개행을 하는 명령어인데, System.getProperty("line.separator")를 별도로 변수에 저장후 sampleStr에 붙여서 호출해도 동일한 결과를 가져온다. 개인적으로 line.separator를 변수에 저장하여 호출하는 것을 선호하는 편인데 그 이유는 필자는 bw.write에 호출할 때 한번에 콜하는 것을 선호하기에 StringBuffer에 세팅해서 한번에 던지는 스타일이다.

     

    동일한 결과가 나오는 파일 생성 메소드

    public static boolean createTextFile(String filePath, List<String> sampleList) {
        BufferedWriter bw = null;
        String newLine = System.getProperty("line.separator");
    
        try {
            bw = new BufferedWriter(new FileWriter(filePath));
    
            for(String sampleStr : sampleList) {
                bw.write(sampleStr + newLine);
            }
    
            bw.close();
        } catch (IOException e) {
            e.printStackTrace();
            return false;
        }
    
        return true;
    }

     

    파일을 저장했으면, 저장한 파일을 읽는 것을 만들어보도록 한다.

     

     

    파일 읽기

    public static List<String> readTextFile(String filePath) {
        List<String> rtnList = new ArrayList<>();
    
        try {
            BufferedReader inFiles
                    = new BufferedReader(new InputStreamReader(
                      new FileInputStream(filePath), StandardCharsets.UTF_8));
    
            String line;
            while((line = inFiles.readLine()) != null) {
                rtnList.add(line);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    
        return rtnList;
    }

     

    파일을 읽는건 저장하는 것보다 복잡한데, 캐릭터셋으로 인해서 좀 더 복잡한 코드가 만들어졌다. 캐릭터셋을 지정하기 위해서는 InputStreamReader를 사용하며, "UTF-8"로 값을 세팅 할 수 있지만 Java 1.7부터 지원하기 시작한 StandardCharsets로 UTF-8을 지정하였다. 


    전체 코드

    import java.io.*;
    import java.nio.charset.StandardCharsets;
    import java.util.ArrayList;
    import java.util.List;
    
    public class Main {
    
        public static void main(String args[]) throws Exception {
            List<String> sampleList = new ArrayList<>();
            for(int i = 0; i < 10; i++) {
                sampleList.add("test-" + i);
            }
    
            createTextFile("D:/test/test.txt", sampleList);
            List<String> rtnList = readTextFile("D:/test/test.txt");
            System.out.println(rtnList);
        }
    
    
        public static boolean createTextFile(String filePath, List<String> sampleList) {
            BufferedWriter bw = null;
            String newLine = System.getProperty("line.separator");
    
            try {
                bw = new BufferedWriter(new FileWriter(filePath));
    
                for(String sampleStr : sampleList) {
                    bw.write(sampleStr + newLine);
                }
    
                bw.close();
            } catch (IOException e) {
                e.printStackTrace();
                return false;
            }
    
            return true;
        }
    
    
        public static List<String> readTextFile(String filePath) {
            List<String> rtnList = new ArrayList<>();
    
            try {
                BufferedReader inFiles
                        = new BufferedReader(new InputStreamReader(
                          new FileInputStream(filePath), StandardCharsets.UTF_8));
    
                String line;
                while((line = inFiles.readLine()) != null) {
                    rtnList.add(line);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
    
            return rtnList;
        }
    }

     

    실행결과

    [test-0, test-1, test-2, test-3, test-4, test-5, test-6, test-7, test-8, test-9]

     

    반응형

    댓글

    Designed by JB FACTORY