2012-06-18 2 views
0

JDK 1.5 환경에서 apache POI 3.7을 사용하고 JVM 인수로 -Xms256m -Xmx512m -XX:PermSize=64M -XX:MaxPermSize=1000M을 사용하고 있습니다. XSSFWorkbook을 생성하는 동안 Apache POI 차단

나는 유휴 상태로가는 네 번째 줄에

File file = new File("C:\\D\\Data Book.xlsx"); 
InputStream inputStream = new FileInputStream(file); 
OPCPackage opcPackage = OPCPackage.open(inputStream); 
XSSFWorkbook workbook = new XSSFWorkbook(opcPackage); 

,이 같은 XLSX 파일을 읽을 수있는 코드를 썼다. JVM 인수를 제거하면 OutOfMemoryError이 발생합니다. 내 파일 크기는 6MB입니다.

+0

어떻게 당신은 유휴 상태에 알 수 있습니까? 아직 처리되지 않을 수 있습니까? –

+0

답장을 보내 주셔서 감사합니다. 계속 진행 중입니다. 언젠가 OutOfMemoryError를 던지고 있습니다. –

+0

이것은 a) 유휴 상태가 아니며 b) 이미 지정한 내용 위에 추가 메모리를 할당해야한다는 것을 나타냅니다. –

답변

1

OPCPackage를 사용하는 것이 필수가 아닌 경우, 내가 바로 인스턴스화 갈 것입니다 :.

InputStream inp = new FileInputStream("C:\\D\\Data Book.xlsx"); 
Workbook wb = WorkbookFactory.create(inp); 

당신이 파일이있는 경우가 POI Quick Guide

+0

여러분 감사합니다. 나는 apache POI의 이벤트 API를 사용하여이 문제를 해결했다. http://poi.apache.org/spreadsheet/how-to.html. –

1

, 다음에 그 통과를 참조하십시오 InputStream를 사용은 버퍼링이 필요 모든 것은 공간을 차지하는 기억 속에 들어 있습니다. 그 버퍼링을 할 필요가 없기 때문에하지 마라!

야간 최신 POI 빌드를 실행중인 경우 매우 간단합니다. 그것은 매우 유사 그렇지 않으면

File file = new File("C:\\D\\Data Book.xlsx"); 
OPCPackage opcPackage = OPCPackage.open(file); 
XSSFWorkbook workbook = new XSSFWorkbook(opcPackage); 

를 : 코드는된다

File file = new File("C:\\D\\Data Book.xlsx"); 
OPCPackage opcPackage = OPCPackage.open(file.getAbsolutePath()); 
XSSFWorkbook workbook = new XSSFWorkbook(opcPackage);