본문 바로가기

IT/개발

JAVA 입력과 출력 stream

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