10讀取java中的xls文件。
但是,當我要讀取大於20MB的大.xls文件時,它會給我提供錯誤。
以下我的代碼運行正常的小.xls文件,但給大的.xls文件的Java堆錯誤。 的Java代碼 -如何讀取java中的大.xls文件?
public static void main(String[] args) throws IOException {
ArrayList<ArrayList<String>> Temp = new ArrayList<ArrayList<String>>();
ArrayList<String> Temp1 = new ArrayList<String>();
int row = 0;
String fname = "D:/Vijay/xls/vijay/bookTest.xls";
try {
InputStream fis = new FileInputStream(fname);
HSSFWorkbook workbook = new HSSFWorkbook(fis);
HSSFSheet sheet = workbook.getSheetAt(0);
FormulaEvaluator formulaEval = workbook.getCreationHelper().createFormulaEvaluator();
int rowEnd = sheet.getLastRowNum();
int rowStart = sheet.getFirstRowNum();
for (int rowNum = rowStart; rowNum < rowEnd; rowNum++) {
Row r = sheet.getRow(rowNum);
int lastColumn = r.getLastCellNum();
int cols = 0;
Temp1 = new ArrayList<String>();
for (int cn = 0; cn < lastColumn; cn++) {
String cellvalue = "";
Cell c = r.getCell(cn, Row.RETURN_BLANK_AS_NULL);
if (c == null) {
cellvalue = "";
} else {
if (r.getCell(cn).getCellType() == HSSFCell.CELL_TYPE_STRING) {
cellvalue = r.getCell(cn).getStringCellValue();
} else if (r.getCell(cn).getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
if (HSSFDateUtil.isCellDateFormatted(r.getCell(cn))) {
DateFormat formatter = new SimpleDateFormat(
"E MMM dd HH:mm:ss Z yyyy");
Date date = (Date) formatter.parse(r
.getCell(cn).getDateCellValue()
.toString());
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cellvalue = cal.get(Calendar.DATE) + "/"
+ (cal.get(Calendar.MONTH) + 1) + "/"
+ cal.get(Calendar.YEAR);
} else {
r.getCell(cn).setCellType(
r.getCell(cn).CELL_TYPE_STRING);
cellvalue = ""
+ r.getCell(cn).getStringCellValue();
}
} else if (r.getCell(cn).getCellType() == HSSFCell.CELL_TYPE_BOOLEAN) {
cellvalue = ""
+ r.getCell(cn).getBooleanCellValue();
} else if (r.getCell(cn).getCellType() == HSSFCell.CELL_TYPE_FORMULA) {
cellvalue = ""
+ formulaEval.evaluate(r.getCell(cn))
.formatAsString();
}
}
Temp1.add(cols, cellvalue);
cols++;
}
if (Temp1.size() > 0) {
Temp.add(row, Temp1);
row++;
}
}
for (ArrayList al : Temp) {
System.out.println("Contents of temp " + al);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
}
錯誤 -
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.LinkedHashMap.createEntry(Unknown Source)
at java.util.LinkedHashMap.addEntry(Unknown Source)
at java.util.HashMap.put(Unknown Source)
at sun.util.resources.OpenListResourceBundle.loadLookup(Unknown Source)
at sun.util.resources.OpenListResourceBundle.loadLookupTablesIfNecessary(Unknown Source)
at sun.util.resources.OpenListResourceBundle.handleGetObject(Unknown Source)
at sun.util.resources.TimeZoneNamesBundle.handleGetObject(Unknown Source)
at java.util.ResourceBundle.getObject(Unknown Source)
at java.util.ResourceBundle.getObject(Unknown Source)
at java.util.ResourceBundle.getStringArray(Unknown Source)
at sun.util.TimeZoneNameUtility.retrieveDisplayNames(Unknown Source)
at sun.util.TimeZoneNameUtility.retrieveDisplayNames(Unknown Source)
at java.util.TimeZone.getDisplayNames(Unknown Source)
at java.util.TimeZone.getDisplayName(Unknown Source)
at java.util.Date.toString(Unknown Source)
at com.test.arrayList.ValidateXls.main(ValidateXls.java:69)
請幫我解決這個問題,或者請建議我另一種方式來閱讀的java大.xls文件。
在此先感謝。
您是否嘗試過增加內存使用你的虛擬機?你有多少內存? – Eypros 2015-01-21 07:07:12