반응형
1. *.xlsx 파일
Logger log = Logger.getLogger(this.getClass());
@Autowired
private insertDAO insertMapper;
public int readExcelFile(MultipartFile file, String siteCode) {
File destFile = null;
int resultCode = -1;
try {
String resUploadPath = configService.getConfigValue("PATH"); // 임시 디렉토리 경로
String yearDir = DateUtil.toString(new Date(), "yyyy"); // 연 별 디렉토리 생성
String monthDir = DateUtil.toString(new Date(), "MM"); // 연 별 디렉토리 생성
resUploadPath = resUploadPath + yearDir + monthDir + "/";
if( file == null || file.isEmpty() ) {
throw new RuntimeException("[readExcelFile] Please select an Excel file....");
}
File destdir = new File(resUploadPath); // 디렉토리 조회
if( !destdir.exists() ) {
destdir.mkdirs(); //디렉토리가 존재하지 않는다면 생성
}
UUID uuid = UUID.randomUUID();
// 작업할 excelfile을 임시디렉토리에 저장한다.
destFile = new File(resUploadPath + uuid.toString() + file.getOriginalFilename());
if( destFile.isFile() ) {
destFile.delete();
}
try {
file.transferTo(destFile);
} catch( IllegalStateException e ) {
throw new RuntimeException(e.getMessage(),e);
}
// excel의 컬럼수는 파일마다 다르기때문에 많은 컬럼을 검색할 수 있는 알파벳리스트를 가져온다.
List<String> alpha = CharCalUtil.alphpCal();
ExcelReadOption excelReadOption = new ExcelReadOption();
// excel파일을 가져올 위치를 전달
excelReadOption.setFilePath(destFile.getAbsolutePath());
// 몆번째 컬럼까지 검색을 할껀지 지정한다.
excelReadOption.setOutputColumns(alpha);
// 몇번째 로우부터 뽑아오는지 지정한다.
excelReadOption.setStartRow(0);
// 옵션들을 지정한 후 지정한 옵션에 맞춰 시트안에 있는 데이터들을 추출하고 리턴받는다.
HashMap<String, Object> excelData = ExcelRead.read(excelReadOption);
// 엑셀의 데이터를 읽은 후 리턴받은 데이터에는 두가지 타입의 데이터가 있다.(필드수, 필드데이터)
@SuppressWarnings("unchecked")
List<Map<String, Object>> excelList = (List<Map<String, Object>>) excelData.get("row");
// 하나의 로우에는 여러개의 필드가 있다. 그 필드 수에 맞게 데이터를 담기 위해 리턴받은 엑셀데이터에서 필드 수를 따로 뺀다.
int fieldCount = Integer.parseInt(excelData.get("fieldCount").toString());
// rowData를 담은 변수를 담은 리스트, 우선 초기화만 시켜놓는다.
List<Map<String, Object>> rowList = new ArrayList<Map<String,Object>>();
// 리턴받은 데이터의 첫줄은 데이터베이스에 insert할때의 필드 이름으로 사용한다.
String[] columnArr = new String[fieldCount];
int k = 0;
for( String key : excelList.get(0).keySet() ) {
columnArr[k] = key;
k++;
}
// 긁어온 row수 만큼 반복하여 rowList에 담는다.
// i를 1부터 시작하는 이유는 excelList에 0번째 row는 컬럼의 이름이 들어가있기때문에 1부터 시작한다.
for( int i=1; i<excelList.size(); i++ ) {
// 컬럼을 제외한 row를 담을 Map객체선언
Map<String, Object> rowData = new HashMap<String, Object>();
for( int j=0; j<fieldCount; j++ ) {
if( !CommonUtil.isEmpty(excelList.get(i)) ) {
rowData.put(columnArr[j], excelList.get(i).get(alpha.get(j)));
}
}
rowList.add(rowData);
}
// 모든 작업이 끝나면 디렉토리 저장되어있던 임시 Excelfile을 삭제한다.(안해놓으면 오류발생)
destFile.delete();
log.info("[readExcelFile] rowList : " + rowList.toString());
// 생성된 rowList를 데이터베이스에 저장한다.
for( int i=0; i<rowList.size(); i++ ) {
if( !CommonUtil.isEmpty(rowList.get(i)) ) {
try {
String A = (String) rowList.get(i).get("A");
String B = (String) rowList.get(i).get("B");
String C = (String) rowList.get(i).get("C");
String D = (String) rowList.get(i).get("D");
String E = (String) rowList.get(i).get("E");
String F = (String) rowList.get(i).get("E");
HashMap<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("A", A);
paramMap.put("B", B);
paramMap.put("C", C);
paramMap.put("D", D);
paramMap.put("E", E);
paramMap.put("F", F);
resultCode = insertMapper.insertData(paramMap);
} catch( Exception e ) {
resultCode = -1;
log.error("[readExcelFile] Insert Fail : " + e);
e.printStackTrace();
}
}
}
} catch( Exception e ) {
resultCode = -1;
destFile.delete();
e.printStackTrace();
}
return resultCode;
}
2. *.csv 파일
Logger log = Logger.getLogger(this.getClass());
@Autowired
private insertDAO insertMapper;
public int readCSVFile(MultipartFile file, String siteCode) {
File destFile = null;
BufferedReader br = null;
int resultCode = -1;
try {
String resUploadPath = configService.getConfigValue("PATH"); // 임시 디렉토리 경로
String yearDir = DateUtil.toString(new Date(), "yyyy"); // 연 별 디렉토리 생성
String monthDir = DateUtil.toString(new Date(), "MM"); // 연 별 디렉토리 생성
resUploadPath = resUploadPath + yearDir + monthDir + "/";
if( file == null || file.isEmpty()) {
throw new RuntimeException("[readCSVFile] Please Select An CSV File....");
}
File destdir = new File(resUploadPath); // 디렉토리 조회
if( !destdir.exists() ) {
destdir.mkdirs(); //디렉토리가 존재하지 않는다면 생성
}
UUID uuid = UUID.randomUUID();
// 작업할 file 임시디렉토리에 저장
destFile = new File(resUploadPath + uuid.toString() + file.getOriginalFilename());
if( destFile.isFile() ) {
destFile.delete();
}
try {
file.transferTo(destFile);
} catch(IllegalStateException e) {
resultCode = -1;
throw new RuntimeException(e.getMessage(), e);
}
List<String> rowList = new ArrayList<String>();
try {
br = new BufferedReader(new InputStreamReader(file.getInputStream(), "UTF-8"));
String line;
while( (line = br.readLine()) != null ) {
rowList.add(line);
}
log.info("[readCSVFile] rowList : " + rowList.toString());
// 모든 작업이 끝나면 디렉토리 저장되어있던 임시 file을 삭제한다.(안해놓으면 오류발생)
destFile.delete();
// 생성된 rowList를 데이터베이스에 저장한다.
for( int i=0; i<rowList.size(); i++ ) {
if( i < 1) {
continue;
}
try {
String[] data = rowList.get((i)).split(",");
HashMap<String, Object> paramMap = new HashMap<String, Object>();
paramMap.put("A", "Code");
paramMap.put("B", data[0]);
paramMap.put("C", data[1]);
paramMap.put("D", data[2]);
paramMap.put("E", data[3]);
paramMap.put("F", data[4]);
resultCode = insertMapper.insertData(paramMap);
} catch( Exception e ) {
resultCode = -1;
log.error("[readCSVFile] Insert Fail : " + e);
e.printStackTrace();
}
}
br.close();
} catch( Exception e ) {
resultCode = -1;
e.printStackTrace();
} finally {
try {
if( br != null ) {
br.close();
}
} catch( Exception e ) {
resultCode = -1;
e.printStackTrace();
}
}
} catch( Exception e ) {
resultCode = -1;
destFile.delete();
e.printStackTrace();
}
return resultCode;
}
반응형
'Java' 카테고리의 다른 글
[Java] 자료구조 Map 에 관하여 (0) | 2022.07.19 |
---|---|
[Java] HashSet 컬렉션 (0) | 2022.05.01 |
[Java] 배열 자르기 (0) | 2022.04.28 |
[Java] ArrayList 정렬(오름차순, 내림차순) (0) | 2022.04.28 |
[Java] 배열의 합계 얻기 (0) | 2022.04.28 |