[Java] 파일 생성, 읽기 및 캐릭터셋(UTF-8) 설정
- Language/Java
- 2022. 3. 7.
자바로 파일을 생성하는 방법은 다양하게 많지만 그 중 가장 범용적이고, 성능도 뛰어난 방법을 소개해보고자 한다.
테스트를 위한 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]
반응형
'Language > Java' 카테고리의 다른 글
[Java] 문자열 비교, equals()와 ==의 차이 이유 (0) | 2022.03.31 |
---|---|
[Java] 문자열 자르기, substring 사용법 및 예제 (0) | 2022.03.17 |
[Java] 리스트 섞기(Shuffle), 로또 번호 생성 (0) | 2022.01.16 |
[Java] 리스트(List) 형 정렬(오름차순, 내림차순) (0) | 2022.01.06 |
[Java] 폴더 체크 및 폴더 생성, 삭제 (0) | 2021.12.29 |