Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Append
- createtextnode
- VAR
- Openlayers
- input
- createElement
- const
- appendChild
- boolean
- 학습법 #집중력
- FOR
- Let
- htmlFor
Archives
- Today
- Total
Atomic Habits
Java - csv Read 및 그룹별 Row 편집하여 csv 저장 본문
출처 : https://super1410.tistory.com/18
1. 데이터가 대용량일 경우 csv로 편집하는 것이 메모리 사용량도 적고 좋다.
2. 원하는 row값을 받아 특정 컬럼에 그룹별로 잘라서 CSV파일로 저장한다.
@RequestMapping(value="/getDivExcelLib", method = RequestMethod.POST)
public @ResponseBody int getDivExcelLib(HttpServletRequest request, HttpServletResponse response) throws Exception {
String path = "C:/help/";
String fileName = request.getParameter("excelName");
String direccion = path+fileName;
int result = 0;
//반환용 리스트
List<List<String>> totalList = new ArrayList<List<String>>();
BufferedReader br = Files.newBufferedReader(Paths.get(direccion), Charset.forName("UTF-8"));
List<String> valueList = new ArrayList<String>();
try{
String line = "";
//전체 리스트
while((line = br.readLine()) != null){
//CSV 1행을 저장하는 리스트
String regex = ",";
int limit = -1;
String column[] = line.split(regex, limit); //컬럼
//배열에서 리스트 반환
if(line.equals("")) {
line = " ";
}
valueList = Arrays.asList(column);
totalList.add(valueList);
}
br.close();
TreeMap<String, Object> segMap = new TreeMap<String, Object>();
//Seg별 Group 별 행갯수 확인
int segValue = 0;
String seg = "";
for(int i =1; i < totalList.size(); i++) { //첫행을 제외하고 Seg확인
seg = totalList.get(i).get(0);
segValue = segValue + (seg.equals(seg) ? 1 : 0);
segMap.put(seg, segValue);
}
//seg 그룹 관련
List<Map<String, Object>> segList = new ArrayList<>(); //seg별 갯수 확인
int startRow = 0;
//각 seg별 seg이름, 시작, 종료 행을 확인한다.
for(String key : segMap.keySet()) {
Map<String, Object> segListMap = new LinkedHashMap<>();
segListMap.put("startRow", startRow + 1);
startRow = Integer.parseInt(String.valueOf(segMap.get(key))) + 1;
int endRow = startRow;
segListMap.put("seq", key);
segListMap.put("endRow", endRow);
segList.add(segListMap);
}
//행 갯수별 전체 리스트에서 csv파일 추출
//새로만들 sheet
fileName = fileName.substring(0, fileName.indexOf("."));
Date now = new Date();
String cDate = new SimpleDateFormat("yyyyMMddHHmmss").format(now);
String nfileName = fileName + "_" + cDate;
for(int i = 0; i < segList.size(); i++) { //seg별 시작row와 종료row확인
StringBuffer data = new StringBuffer();
Charset.forName("UTF-8");
String segName = (String) segList.get(i).get("seq");
int start = (int) segList.get(i).get("startRow");
int end = (int) segList.get(i).get("endRow");
for(int j = start; j < end; j++ ) {
if(j == start) { //헤더 삽입
for(int k = 1; k < valueList.size(); k++) {
data.append(totalList.get(0).get(k) + ",");
}
data.append('\n');
}
for(int k = 1; k < valueList.size(); k++) {
data.append(totalList.get(j).get(k) + ",");
}
data.append('\n');
}
path = "C:/help/" + nfileName + "_" + segName + ".csv";
FileOutputStream outputStream = new FileOutputStream(path);
outputStream.write(data.toString().getBytes());
outputStream.close();
}
System.out.println("저장완료 : ");
result = 1;
}catch(FileNotFoundException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}finally{
try{
if(br != null){
br.close();
}
}catch(IOException e){
e.printStackTrace();
}
}
return result ;
}
'IT > JAVA' 카테고리의 다른 글
[출처/참조] 자바 채팅프로그램 개발 (0) | 2022.05.29 |
---|---|
Java_Web_Study (0) | 2022.04.26 |
공공데이터 개발노트 - 개발시 필요한 라이브러리 쉽게 가져오는 마술사 메이븐(Maven) 이란? (1) | 2021.12.21 |
Java NIO Direct Buffer를 이용해서 대용량 파일 행 기준으로 쪼개기 (0) | 2021.12.21 |
JAVA - CSV 파일 읽기(한글 읽기, 한글 깨짐 방지, CSV 인코딩 UTF-8 저장) (0) | 2021.12.21 |
Comments