삶 가운데 남긴 기록 AACII.TISTORY.COM
org.apache.poi 자바용 오피스 라이브러리 임시 파일 제거 본문
POI 라이브러리 임시 파일 저장 경로 지정
자바로 오피스(엑셀) 파일을 다룰 때 흔히 사용하는 org.ahache.poi 라이브러리를 사용할 때, 엑셀 파일 작성을 위한 데이터와 스타일 정보들이 정의된 xml 형식의 임시 파일들이 생성되게 됩니다.
이 임시 파일들이 생성되는 경로는 기본적으로 시스템의 임시 디렉토리 경로를 사용합니다.
그런데 리눅스에서는 기본 임시 파티션인 /tmp 을 사용하게 되는데, 이 /tmp 파티션이 용량이 부족한 경우가 발생할 수 있습니다.
public class TempDirCheck {
public static void main(String[] args) {
String tempDir = System.getProperty("java.io.tmpdir");
System.out.println("Temporary Directory: " + tempDir);
}
}
System.getProperty("java.io.tmpdir")을 이용하면 자바 application에서 시스템의 임시 디렉토리 경로를 알아낼 수 있습니다.
자바 application이 실행되는 JVM 환경 변수를 지정해서 이 임시 파일들이 저장되는 경로를 변경해줄 수 있습니다.
-Djava.io.tmpdir=/your/custom/tmpdir
톰캣(WAS)이나 자바를 실행할 때 위 처럼 tmpdir을 특정 경로로 지정해주면 poi 라이브러리에서 사용하는 임시 파일(xml)들이 저장되는 경로를 지정해 줄 수 있습니다.
poi 라이브러리 임시 파일 자동 삭제
Apache POI 라이브러리를 사용해서 대용량 데이터를 처리할 때 SXSSFWorkbook을 이용하면 성능을 최적화 할 수 있습니다.
이 때 dispose() 메소드를 작업 끝난 후 사용하면 생성되었던 임시 파일(xml)들을 자동으로 삭제 할 수 있습니다.
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import java.io.FileOutputStream;
import java.io.IOException;
public class POIDisposeExample {
public static void main(String[] args) {
// SXSSFWorkbook 생성
SXSSFWorkbook workbook = new SXSSFWorkbook();
Sheet sheet = workbook.createSheet("ExampleSheet");
// 데이터를 시트에 작성
for (int rownum = 0; rownum < 1000; rownum++) {
Row row = sheet.createRow(rownum);
for (int cellnum = 0; cellnum < 10; cellnum++) {
Cell cell = row.createCell(cellnum);
cell.setCellValue("Data " + rownum + "," + cellnum);
}
}
try (FileOutputStream out = new FileOutputStream("example.xlsx")) {
workbook.write(out);
} catch (IOException e) {
e.printStackTrace();
} finally {
// 작업이 완료된 후 dispose() 메소드를 호출하여 임시 파일 삭제
workbook.dispose();
}
}
}
728x90
'DEV&OPS > Java' 카테고리의 다른 글
[SWT/JFace] FileDialog 파일 열기 대화 상자 (0) | 2024.11.27 |
---|---|
[SWT/JFace] 주요 위젯 (0) | 2024.11.27 |
[SWT/JFace] 이벤트 처리 (45) | 2024.11.27 |
[SWT/JFace] Composite 클래스 (1) | 2024.11.27 |
[SWT/JFace] Widget, Control, Label, Button (1) | 2024.11.27 |