Skip to content

Commit e4fe1ac

Browse files
committed
Write CsvUtils Class test code (It will be used instead of the openCsv library)
1 parent 986a126 commit e4fe1ac

File tree

1 file changed

+185
-0
lines changed

1 file changed

+185
-0
lines changed
Lines changed: 185 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,185 @@
1+
package Utils;
2+
3+
import java.io.BufferedReader;
4+
import java.io.File;
5+
import java.io.FileNotFoundException;
6+
import java.io.FileReader;
7+
import java.io.IOException;
8+
import java.util.ArrayList;
9+
import java.util.HashMap;
10+
import java.util.LinkedHashMap;
11+
import java.util.List;
12+
import java.util.Map;
13+
import java.util.stream.Collectors;
14+
15+
import org.apache.commons.lang3.StringUtils;
16+
import org.apache.commons.text.StringEscapeUtils;
17+
import org.junit.jupiter.api.BeforeAll;
18+
import org.junit.jupiter.api.Test;
19+
20+
import com.opencsv.bean.CsvToBeanBuilder;
21+
22+
import root.core.domain.ArchiveUsage;
23+
24+
public class CsvUtilsTest {
25+
26+
// @Test
27+
public void csvToBeanTest() {
28+
List<ArchiveUsage> result = null;
29+
File file = new File("./report/ArchiveUsage/ERP.txt");
30+
31+
try {
32+
33+
result = new CsvToBeanBuilder<ArchiveUsage>(new FileReader(file)).withSeparator(',')
34+
.withIgnoreEmptyLine(true).withType(ArchiveUsage.class).build().parse();
35+
36+
System.out.println(result);
37+
} catch (Exception e) {
38+
e.printStackTrace();
39+
}
40+
}
41+
42+
public static List<String> headers;
43+
public static String csvString;
44+
45+
@BeforeAll
46+
public static void setUp() {
47+
// headers = getHeadersFromText();
48+
// csvString = getCsvStringFromText();
49+
50+
File file = new File("./report/ArchiveUsage/ERP.txt");
51+
headers = getHeadersFromFile(file);
52+
csvString = getCsvStringFromFile(file);
53+
System.out.println("Before parsing: \n" + csvString);
54+
}
55+
56+
@Test
57+
public void testFile() {
58+
System.out.println(getHeadersFromFile(new File("./report/ArchiveUsage/ERP.txt")));
59+
}
60+
61+
private static List<String> getHeadersFromFile(File file) {
62+
List<String> result = new ArrayList<>();
63+
64+
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
65+
66+
String firstLine = br.readLine();
67+
Map<Integer, String> headerMap = parseCsvLine(firstLine);
68+
List<Integer> sortedKeyList = headerMap.keySet().stream().sorted().collect(Collectors.toList());
69+
70+
for (int i : sortedKeyList) {
71+
result.add(headerMap.get(i));
72+
}
73+
74+
} catch (FileNotFoundException e) {
75+
e.printStackTrace();
76+
} catch (IOException e) {
77+
e.printStackTrace();
78+
}
79+
80+
return result;
81+
}
82+
83+
private static String getCsvStringFromFile(File file) {
84+
StringBuilder result = new StringBuilder();
85+
86+
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
87+
88+
br.readLine();
89+
String line = "";
90+
while ((line = br.readLine()) != null) {
91+
result.append(line);
92+
}
93+
94+
} catch (FileNotFoundException e) {
95+
e.printStackTrace();
96+
} catch (IOException e) {
97+
e.printStackTrace();
98+
}
99+
100+
return result.toString();
101+
}
102+
103+
private static List<String> getHeadersFromText() {
104+
List<String> headers = List.of("FIRST", "SECOND", "THIRD");
105+
return headers;
106+
}
107+
108+
private static String getCsvStringFromText() {
109+
String first = wrapInDoubleQuotation("1");
110+
String second = wrapInDoubleQuotation("\\역슬래쉬");
111+
String third = wrapInDoubleQuotation("\"쌍따옴,표로 묶음\"");
112+
String csvString1 = StringUtils.joinWith(",", first, second, third);
113+
114+
String first2 = wrapInDoubleQuotation("2");
115+
String second2 = wrapInDoubleQuotation("\\역슬래쉬2");
116+
String third2 = wrapInDoubleQuotation("\"쌍따옴,표로 묶음2\"");
117+
String csvString2 = StringUtils.joinWith(",", first2, second2, third2);
118+
119+
String first3 = wrapInDoubleQuotation("3");
120+
String second3 = wrapInDoubleQuotation("\\역슬래쉬3");
121+
String third3 = wrapInDoubleQuotation("\"쌍따옴,표로 묶음3\"");
122+
String csvString3 = StringUtils.joinWith(",", first3, second3, third3);
123+
124+
return StringUtils.joinWith("\n", csvString1, csvString2, csvString3);
125+
}
126+
127+
@Test
128+
public void parseCsvString() {
129+
String[] csvLines = csvString.split("\n");
130+
131+
List<Map<String, String>> result = new ArrayList<>();
132+
133+
for (String line : csvLines) {
134+
Map<String, String> map = new LinkedHashMap<>();
135+
136+
Map<Integer, String> lineMap = parseCsvLine(line);
137+
for (int index : lineMap.keySet()) {
138+
if (index >= headers.size()) {
139+
continue;
140+
} else {
141+
map.put(headers.get(index), lineMap.get(index));
142+
}
143+
}
144+
145+
System.out.println(result.size() + " " + map);
146+
result.add(map);
147+
}
148+
149+
System.out.println(result);
150+
}
151+
152+
private static Map<Integer, String> parseCsvLine(String csvLine) {
153+
Map<Integer, String> map = new LinkedHashMap<>();
154+
155+
int index = 0;
156+
boolean isFirst = true;
157+
boolean isOpen = false;
158+
StringBuilder element = new StringBuilder();
159+
for (char c : csvLine.toCharArray()) {
160+
if (c == '"') {
161+
isOpen = !isOpen;
162+
if (isFirst) {
163+
isFirst = false;
164+
} else {
165+
map.put(index, StringEscapeUtils.unescapeHtml4(element.toString()));
166+
element = new StringBuilder();
167+
}
168+
} else if (c == ',') {
169+
if (isOpen) {
170+
element.append(c);
171+
} else {
172+
index++;
173+
}
174+
} else {
175+
element.append(c);
176+
}
177+
}
178+
179+
return map;
180+
}
181+
182+
private static String wrapInDoubleQuotation(String string) {
183+
return StringUtils.join("\"", StringEscapeUtils.escapeHtml4(string), "\"");
184+
}
185+
}

0 commit comments

Comments
 (0)