지난번에 이어서 오늘은 파일을 생성해보도록 하겠습니다.
파일 생성은 이미 생성을 시도했던 jwt, 원본 데이터+해시입니다.
파일로 저장하는 함수는 다음과 같이 만들었습니다.
public boolean fileWrite(String dataString, String filePath) {
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filePath), "UTF-8"));
File file = new File(filePath);
List dataList = new ArrayList();
if(file.isFile()) {
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(filePath), "UTF-8"));
while(br.ready()) {
if(br.readLine().isEmpty()) {
continue;
}
String line = br.readLine();
dataList.add(line);
}
br.close();
}
for(String data : dataList) {
bw.write(data);
bw.newLine();
}
bw.write(dataString);
bw.close();
return true;
}
위 내용을 참고하셔서 파일을 저장하시면 됩니다.
그럼 아래와 같이 데이터를 입력할 때 2개의 파일이 생성이 됩니다.
위의 경우는 4번 테스트를 한 결과입니다.
위와 같이 파일을 생성하기 위해서는 parserMapFromJson 함수에서 생성 한 키를 참고해야 합니다.
String fileName = (String)parserJsonFromMap(data).get("jsonkey");
String filePath = defaultPath() + "/" + fileName + ".txt";
if(fileWrite(data, filePath)) {
System.out.println("JWT FILE Write Success");
} else {
System.out.println("JWT FILE Write Faile");
}
parserJsonFromMap 함수를 이용해 jwt에 있는 jsonkey의 값을 조회하여 파일 명으로 사용했습니다.
하지만 보시는 것처럼 정렬되지 않아 구분이 쉽지 않습니다.
그래서 파일 생성 시 경로를 따로 구분하도록 했습니다. 더 좋은 방법은 파일명 규칙을 정의하는 것이지만
파일명 정의를 하면 현재는 하드코딩을 해야 할 수 있기 때문에 생략하도록 하겠습니다.
위 같은 경우는 코드가 추가되지 않고 resource아래에 data, jwtfiles라는 디렉터리를 생성하고 fileWrite의
2번 파라미터에 경로를 지정했습니다.
그리고 파일 쓰기를 하면서 문제가 있었던 것 중 하나는 바로 한글 인코딩 문제입니다.
인코딩은 한글을 쓸 때 항상 신경 쓰이는 부분이죠
위 코드 생성 후 인코딩 문제가 발생하여 기본 인코딩을 설정하는 함수를 추가하기로 했습니다.
인코딩 설정 코드는 다음과 같습니다.
public static String getDefaultFileEncoding() {
String lang = getCookie("lang");
String encoding = "";
if ( lang.startsWith("ko") ) {
encoding = "MS949";
} else if ( lang.startsWith("ja") ) {
encoding = "MS932";
} else {
encoding = "UTF-8";
}
return encoding;
}
UTF8 만 쓴다면 문제가 없겠지만 이미 생성된 파일이 어떤 인코딩인지는 알 수 없겠네요
다음에는 파일의 인코딩을 확인할 수 있는 방법도 생각해 볼 필요는 있을 것 같습니다.
위 내용 참고하시기 바랍니다.
정리된 소스코드는 정리 후 기회가 되면 올리도록 하겠습니다.