gimmickbutreal
[JAVA/CSV] Java로 csv 파일 데이터 변경하기 본문
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
|
import org.apache.commons.csv.*;
import java.io.*;
import java.util.*;
public class CSVUpdaterAndSorter {
public static void main(String[] args) {
try {
// 입력 CSV 파일 경로
String inputFilePath = "C:\\Users\\input.csv";
// 출력 CSV 파일 경로 (새로운 파일로 저장)
String outputFilePath = "C:\\Users\\output.csv";
// 새로운 데이터 생성
String[] newData = {"용현동꿀돼지", "purehug@hanmail.net", "양재동", "IT팀", "용현동꿀돼지/IT팀<purehug@hanmail.net>"};
// 삭제할 데이터의 이름
String nameToDelete = "혜화동꿀돼지";
// 파일을 CP949로 읽기 위해 Reader를 생성
Reader reader = new InputStreamReader(new FileInputStream(inputFilePath), "CP949");
// 파일을 CP949로 쓰기 위해 Writer를 생성
Writer writer = new OutputStreamWriter(new FileOutputStream(outputFilePath), "CP949");
// 기존 데이터를 불러옴
CSVParser csvParser = CSVFormat.DEFAULT
.withFirstRecordAsHeader()
.withIgnoreEmptyLines(true)
.withIgnoreSurroundingSpaces()
.parse(reader);
// 기존 데이터를 리스트에 복사
List<CSVRecord> records = new ArrayList<>(csvParser.getRecords());
// 이름 열을 기준으로 정렬
records.sort(Comparator.comparing(record -> record.get("이름")));
// 새로운 데이터를 CSV 파일에 추가
CSVFormat csvFormat = CSVFormat.DEFAULT
.withHeader(csvParser.getHeaderMap().keySet().toArray(new String[0]))
.withRecordSeparator('\n'); // 개행 문자를 '\n'으로 설정
// 새로운 데이터 추가
CSVPrinter csvPrinter = new CSVPrinter(writer, csvFormat);
// 기존 데이터 출력 (삭제할 이름을 가진 행은 제외)
for (CSVRecord record : records) {
if (!record.get("이름").equals(nameToDelete)) {
csvPrinter.printRecord(record);
}
}
// 새로운 데이터 추가
csvPrinter.printRecord(Arrays.asList(newData));
csvPrinter.flush();
csvPrinter.close();
// 리소스를 닫음
csvParser.close();
writer.close();
System.out.println("새로운 데이터가 새 파일에 추가되고 이름순으로 정렬되었습니다. (신규 데이터 예)");
} catch (IOException e) {
e.printStackTrace();
}
}
}
|
cs |
생각보다 공공기관이나 회사에서 인코딩을 CP949 형식으로 쓰는 경우가 많은데, 이 인코딩 형식의 엑셀 파일(csv)을 수정하고 새로운 파일을 생성하는 코드이다.
유의할 점
1. 본인은 이클립스를 사용했는데, 관리자 권한으로 실행해야 오류가 적게 일어난다.
2. DRM에 걸려있는 파일은 접근이 불가능하며, 이클립스로 생성된 파일은 DRM이 적용되어 있지 않다.
3. 엑셀 파일을 다룰 때 인코딩은 매우 중요하니 파일이 UTF-8인지, ANSI인지, UNIX/WINDOWS 등등 모든 걸 꼼꼼히 확인해야 한다.
반응형
'Programming' 카테고리의 다른 글
[JAVA/ENCODING] 자바로 엑셀 파일 인코딩 변경하기 (0) | 2023.10.06 |
---|---|
[PostgreSQL] Mac 환경에서 RDS 연동하기 (0) | 2023.08.25 |