java.io 패키지의 개요
Provides for system input and output through data streams, serialization and the file system.
데이터 스트림을 통한 시스템 입력 및 출력 제공, 직렬화 파일시스템
stream > byte단위로 파일을 쓰고 읽는다.
즉, 우리가 서버에 업로드와 다운로드시 파일은 byte단위로 작업됩니다.
저는 Spring batch에서 csv파일을 읽어 데이터 작업을 한 후 완료파일을 excel로 만드는 작업을 했습니다.
그 엑셀은 배치완료시점에 다운받는게 아닌
엑셀파일을 FTP올리고(쓰고) 사용자가 언제든지 다운받을 수 있도록 해야했습니다.
일반적인 JSP에서의 엑셀다운로드가 아니였습니다.
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
|
BufferedReader br = null;
HSSFWorkbook workBook = new HSSFWorkbook();
//서버경로의 파일
String readFile = "/home/root/read.csv";
//엑셀파일을 완료후 저장할 파일
String writeFile = "/home/root/save/write.xls";
FilerOutputStream fileOutputStream = new FileOutputStream(writeFile);
try{
//서버에 업로드되어있는 byte단위의 파일을 읽습니다 ==> new FileInputStream(readFile)
//InputStreamReader ==> byte파일을 문자로 변환(브릿지역할)
//BufferedReader ==> 문자열을 buffer에 담고 읽는다(효율성)
br = new BufferedReader(new InputStreamReader(new FileInputStream(readFile), "EUC-KR"));
//TO-DO 엑셀파일작업완료(반복문 등)
//1번 엑셀파일 완료 후 서버에 write합니다.(성공)
workBook.write(fileOutputStream);
//2번 이유는 모르겠지만 이런식으로 쓰니 엑셀파일이 안열립니다..오류인거 같습니다.(오류)
//fileOutputStream.write(workBook.getBytes());
//파일쓰기를하는 액션중 2번은 오류가 납니다.
}catch{
//에러처리
}finally{
if(null != fileOutputStream){
fileOutputStream.close();
}
if(null != br){
br.close();
}
if(null != workBook){
workBook.close();
}
}
|
cs |
정리하면
스프링배치에서 파일을 읽어들여
처리를 한 후
처리한 엑셀파일을 다시 파일업로드해서
사용자들이 언제나 다운받을 수 있도록 처리
'IT > 개발' 카테고리의 다른 글
spring junit test (0) | 2020.10.16 |
---|---|
JAVA 상대경로 (0) | 2019.12.02 |
Spring ibatis resultMap 쿼리 2개실행 (0) | 2019.10.16 |
Spring(JAVA) 엑셀 대용량 업로드 (3) | 2019.10.12 |
스프링 form태그 (0) | 2019.10.09 |