2014-05-16 2 views
0

나는 약 8000 열과 1200 행을 포함하는 netbeans에서 java apache poi를 통해 Excel 파일을 읽으려고하는데 다음과 같은 예외가 발생합니다. 또한 -Xmx2048m으로 netbeans의 힙 크기를 늘리려고했지만 그다지 도움이되지 않습니다.자바에서 큰 excel 파일을 읽으려면

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 
    at org.apache.xmlbeans.impl.store.Cur$CurLoadContext.attr(Cur.java:3039) 
    at org.apache.xmlbeans.impl.store.Cur$CurLoadContext.attr(Cur.java:3060) 
    at org.apache.xmlbeans.impl.store.Locale$SaxHandler.startElement(Locale.java:3250) 
    at org.apache.xmlbeans.impl.piccolo.xml.Piccolo.reportStartTag(Piccolo.java:1082) 
    at org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseAttributesNS(PiccoloLexer.java:1802) 
    at org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseOpenTagNS(PiccoloLexer.java:1521) 
    at org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseTagNS(PiccoloLexer.java:1362) 
    at org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseXMLNS(PiccoloLexer.java:1293) 
    at org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseXML(PiccoloLexer.java:1261) 
    at org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.yylex(PiccoloLexer.java:4808) 
    at org.apache.xmlbeans.impl.piccolo.xml.Piccolo.yylex(Piccolo.java:1290) 
    at org.apache.xmlbeans.impl.piccolo.xml.Piccolo.yyparse(Piccolo.java:1400) 
    at org.apache.xmlbeans.impl.piccolo.xml.Piccolo.parse(Piccolo.java:714) 
    at org.apache.xmlbeans.impl.store.Locale$SaxLoader.load(Locale.java:3439) 
    at org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1270) 
    at org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1257) 
    at org.apache.xmlbeans.impl.schema.SchemaTypeLoaderBase.parse(SchemaTypeLoaderBase.java:345) 
    at org.openxmlformats.schemas.spreadsheetml.x2006.main.WorksheetDocument$Factory.parse(Unknown Source) 
    at org.apache.poi.xssf.usermodel.XSSFSheet.read(XSSFSheet.java:188) 
    at org.apache.poi.xssf.usermodel.XSSFSheet.onDocumentRead(XSSFSheet.java:180) 
    at org.apache.poi.xssf.usermodel.XSSFWorkbook.onDocumentRead(XSSFWorkbook.java:300) 
    at org.apache.poi.POIXMLDocument.load(POIXMLDocument.java:159) 
    at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:221) 
    at testdoc.Testdoc.main(Testdoc.java:26) 
Java Result: 1 
BUILD SUCCESSFUL (total time: 49 seconds) 

라인에는 26의 InputStream를 사용

File excel = new File ("E:\\Project\\Rapid out\\"+filename+""+type+".xlsx"); 
       FileInputStream fis = new FileInputStream(excel); 
     Line 26:: XSSFWorkbook wb = new XSSFWorkbook(fis); 
       XSSFSheet ws = wb.getSheet("Sheet2"); 
+0

[excel] 태그는 독자적으로 도움이되지 않습니다. – pnuts

답변

1

대신 없습니다 당신은 파일을 시도 할 수 있습니다 :

XSSFWorkbook wb = new XSSFWorkbook(excel);

POI Guide

에서

통합 문서 (.xls HSSFWorkbook 또는 .xlsx XSSFWorkbook)를 열 때 파일 또는 InputStream에서 통합 문서를로드 할 수 있습니다. File 객체를 사용하면 메모리 사용량을 줄이는 반면 InputStream은 전체 파일을 버퍼해야하므로 더 많은 메모리가 필요합니다.

관련 문제