【发布时间】:2019-07-09 22:16:39
【问题描述】:
我有这个代码,这个错误不断出现。我只有一个 excel ,但似乎没有任何效果,我已经尝试了很多我在网上冲浪时发现的选项,但根据我想做的事情似乎没有任何效果。
我使用不同的案例来简化我的业务逻辑,我不会改变它,所以我不知道如何解决这个问题。
private static final String nombreArchivo = "casoPrueba.xlsx";
private static final String rutaArchivo = "src\\test\\resources\\data\\" + nombreArchivo;
public static XSSFSheet SacaHojaSegunTipo(String tipo) throws IOException {
if (workbook == null) {
try (FileInputStream fis = new FileInputStream(new File(rutaArchivo))) {
workbook = new XSSFWorkbook(fis);
}
}
XSSFSheet spreadsheet = null;
switch (tipo) {
case "Candidatos Minorista":
spreadsheet = workbook.getSheetAt(1);
break;
case "Conversion Candidatos":
spreadsheet = workbook.getSheetAt(2);
break;
case "Cuentas":
spreadsheet = workbook.getSheetAt(3);
break;
case "Detalle Cuenta":
spreadsheet = workbook.getSheetAt(4);
break;
case "Historial de Cuentas":
spreadsheet = workbook.getSheetAt(5);
break;
case "Cuentas Financieras":
spreadsheet = workbook.getSheetAt(6);
break;
case "AR Estado Automático":
spreadsheet = workbook.getSheetAt(7);
break;
case "Oportunidades":
spreadsheet = workbook.getSheetAt(8);
break;
default:
spreadsheet = workbook.getSheetAt(0);
break;
}
return spreadsheet;
}
我知道这不是一个有效的方法。希望任何人都可以帮助我。
【问题讨论】:
-
文件大小是多少?
-
@rodrigoap 260 kb
-
您是否多次加载文件?似乎 SacaHojaSegunTipo 方法在每次请求工作表时都没有理由加载文件。好像不太对。
-
那么可能是 Maven:stackoverflow.com/questions/4066424/…
-
您的代码有两个大问题:首先,正如@rodrigoap 所说,每次请求工作表时您都在加载文件。抱歉,我不在乎您的测试如何,这是您的生产代码。一次读取文件(可能读入静态变量,因为这是一个静态方法),然后从该副本返回工作表。其次,你不要关闭你的 FileInputStream (这会吃资源 - 见stackoverflow.com/questions/22889075/…)
标签: java excel out-of-memory