JAVA

[ JAVA ] - 파일 작업하기 (파일 읽기)

algml0703 2023. 5. 11. 21:57
반응형

파일 작업하기 (파일 읽기)

MessageFormat 활용

MessageFormat 경우 데이터를 일정한 형식으로 출력할 수 있게 도와주는 클래스이다. 예를 들어 아래의 코드의 경우 data.txt 파일을 불러와서 "INSER INTO VALUES ({0}, {1}, {2}, {3})"의 {0}, {1}, {2}, {3}의 위치에 데이터가 들어간 형태로 출력하여 준다. 

public class MessageFormatEx551 {
    public static void main(String[] args) throws Exception {
        String tableName ="USER_INFO";
        String fileName = "data.txt";
        String msg = "INSERT INTO " 
        	+ tableName + " VALUES (''{0}'',''{1}'',{2},''{3}'');";
            // 파일에서 출력해 온 데이터를 각각 위의 숫자의 위치에 맞게 넣어준다.
        Scanner s = new Scanner(new File(fileName));
        String pattern = "{0}/{1}/{2}/{3}";
        // 읽어올 파일에서 데이터는 위와 같이 '/'로 구분자가 되어 있어야 한다.
        
        MessageFormat mf = new MessageFormat(pattern);
        while(s.hasNextLine()) { 
        // line 즉 한 줄을 기준으로 하여 데이터를 가져온다..
            String line = s.nextLine();
            Object[] objs = mf.parse(line);
            // 구분자 '/'를 기준으로 파싱하여 가져온 데이터를 objs에 담는다.
            
            System.out.println(
            	MessageFormat.format(msg, objs)
                // 파싱되어 objs에 담긴 데이터를 msg 형식에 맞추어 출력한다.
            );
        }
        s.close();
        // 파일을 닫는다.
    }
}

참고로 data.txt의 파일은 아래와 같은 데이터를 가지고 있다.

이때 위의 MessageFormatEx551을 실행 시켜 보면 아래와 같이 파일의 위치를 찾지 못한다는 에러가 나올 수 있다. 이는 파일을 인식하는 경로를 제대로 맞춰주지 못했기 때문이다.

Exception in thread "main" java.io.FileNotFoundException: data4.txt (No such file or directory)

위와 같은 에러가 나온 경우 인텔리제이의 경우 아래와 같이 실행 버튼 옆에를 클릭 후 Edit Configurations..을 열어서 

아래와 같이 working directory를 해당 폴더명 하위의 src/main으로 맞추어 주고, 읽어오려는 파일을 main 하위에 두면 된다.

* 파일의 경로를 찾지 못하는 경우 : https://gksdudrb922.tistory.com/181

위와 같이 경로를 맞추어 준 후 실행 시켜 주면, 이와 같이 데이터를 출력해 주는 것을 확인할 수 있다.

또한 반대로 위와 같은 쿼리문으로 되어ㅇ 있는 형식에서 아래와 같이 데이터만을 추출해낼 수 도 있다.

import java.text.*;

public class ReverseParse {
    public static void main(String[] args) throws Exception {
        String[] data = {
                "INSERT INTO USER_INFO VALUES ('오미희','010-1234-5679',28,'0703');",
        };
        String pattern = "INSERT INTO USER_INFO VALUES ({0},{1},{2},{3});";
        MessageFormat mf = new MessageFormat(pattern);

        for (int i = 0; i < data.length; i++) {
            Object[] objs = mf.parse(data[i]);
            for(int j=0; j < objs.length; ++j) {
             System.out.print(objs[j] + ",");
            }
            System.out.println();
        }
    }
}

 

 

 

출처

자바의 정석

반응형