파일 작업하기 (파일 읽기)
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();
}
}
}
출처
자바의 정석
'JAVA' 카테고리의 다른 글
[ Java ] - 프로세스와 쓰레드 - 02) (0) | 2023.10.17 |
---|---|
[ Java ] - 프로세스와 쓰레드 - 01) (0) | 2023.10.16 |
[ JAVA ] - 커스텀 어노테이션 만드는 법 (0) | 2023.05.06 |
[ Java ] - 상속 (instanceOf / 멤버변수가 같을 때 ) (0) | 2023.01.02 |
[ Java ] - 생성자 (0) | 2022.12.30 |