Library Info
Maven
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.0</version>
</dependency>
Gradle
// https://mvnrepository.com/artifact/org.apache.poi/poi
compile group: 'org.apache.poi', name: 'poi', version: '4.1.0'
- Apache POI-ooxml (xlsx파일 사용 시 필요)
Maven
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.0</version>
</dependency>
Gradle
// https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml
compile group: 'org.apache.poi', name: 'poi-ooxml', version: '4.1.0'
As-is
public static Map<String, Set<String>> load(String path) {
if (StringUtils.isEmpty(path)) {
throw new IllegalArgumentException("학교 목록 파일 경로가 지정되지 않았습니다.");
}
Map<String, Set<String>> map = null;
Set<String> set = null;
try {
Workbook workbook = WorkbookFactory.create(new FileInputStream(path));
int rowindex = 0;
int columnindex = 0;
int sheetSize = workbook.getNumberOfSheets();
map = new HashMap<>();
Sheet sheet = null;
Row row = null;
Cell cell = null;
for (int i = 0; i < sheetSize; i++) {
set = new HashSet<>();
sheet = workbook.getSheetAt(i);
int rows = sheet.getPhysicalNumberOfRows();
for (rowindex = 0; rowindex < rows; rowindex++) {
row = sheet.getRow(rowindex);
if (row != null) {
int cells = row.getPhysicalNumberOfCells();
for (columnindex = 0; columnindex <= cells; columnindex++) {
cell = row.getCell(columnindex);
if (cell == null) {
continue;
}
set.add(Optional.ofNullable(cell.getStringCellValue()).orElse(""));
}
}
}
map.put(sheet.getSheetName(), set);
}
}catch(Exception e) {
e.printStackTrace();
}
return map;
}
To-be
public static Map<String, Set<String>> load(String path) {
if (StringUtils.isEmpty(path)) {
throw new IllegalArgumentException("학교 목록 파일 경로가 지정되지 않았습니다.");
}
try {
Workbook workbook = WorkbookFactory.create(new FileInputStream(path));
return IntStream.range(0, workbook.getNumberOfSheets())
.mapToObj(workbook::getSheetAt)
.collect(
Collectors.toMap(
Sheet::getSheetName,
sheet -> IntStream.range(0, sheet.getPhysicalNumberOfRows())
.mapToObj(sheet::getRow)
.filter(Objects::nonNull)
.map(r -> r.getCell(0))
.filter(Objects::nonNull)
.map(c -> Optional.ofNullable(c.getStringCellValue()).orElse(""))
.collect(Collectors.toSet())
)
);
}catch(FileNotFoundException fnfe) {
throw new IllegalArgumentException("학교 목록 파일을 찾을 수 없습니다.");
} catch (IOException ie) {
ie.printStackTrace();
throw new IllegalArgumentException("파일을 읽는 중 오류가 발생하였습니다.");
}
}
'Dev > Backend' 카테고리의 다른 글
| 카운트 증가 로직 성능 향상을 위한 방법 (0) | 2019.09.26 |
|---|---|
| [Java/ Intellij] 스트림 디버깅(Stream debugging) 쉽게 하기 (0) | 2019.08.13 |
| [jackson] json serialize 만 ignore 하고 싶다면? (1) | 2019.01.25 |
| [jackson] json serialize 시 상위클래스 필드 무시하기 (0) | 2019.01.15 |
| [spring - mybatis tip] MyBatis(iBatis)에서 Java Enum code custom typeHandler 사용하기 (1) | 2017.07.06 |