[JAVA] Évitez les erreurs de bombe Zip lors de la lecture de gros fichiers avec POI

Implémentation du problème

    OPCPackage p = null;
	try {
		p = OPCPackage.open(file, PackageAccess.READ);
		log.info("Read File:[" + file + "]");
		XSSFStringsTable strings = new XSSFStringsTable(p);
		XSSFReader xssfReader = new XSSFReader(p);
		StylesTable styles = xssfReader.getStylesTable();
		XSSFReader.SheetIterator iter = (XSSFReader.SheetIterator) xssfReader.getSheetsData();
		List<CommonRecord> resultList = new ArrayList<CommonRecord>();

		List<String> targetSheetList = ConfigUtil.getTargetSheet(key);
		while (iter.hasNext()) {
			InputStream stream = iter.next();
			String sheetName = iter.getSheetName();
			if (targetSheetList.isEmpty()
					|| !targetSheetList.isEmpty() && targetSheetList.contains(sheetName.trim())) {
				log.info("Read Sheet:[" + sheetName + "]");
				resultList.addAll(processSheet(styles, strings, stream, key, file));
			}
			stream.close();
		}
		return resultList;

StylesTable styles = xssfReader.getStylesTable (); L'erreur suivante se produit.

java.lang.ClassCastException: org.apache.poi.xssf.usermodel.XSSFWorkbook cannot be cast to org.apache.poi.xssf.streaming.SXSSFWorkbook

Évitez les erreurs en appelant ZipSecureFile.setMinInflateRatio ()

Mise en œuvre après rénovation

    OPCPackage p = null;
	try {
		p = OPCPackage.open(file, PackageAccess.READ);
		log.info("Read File:[" + file + "]");
		XSSFStringsTable strings = new XSSFStringsTable(p);
		XSSFReader xssfReader = new XSSFReader(p);
		StylesTable styles = xssfReader.getStylesTable();
		XSSFReader.SheetIterator iter = (XSSFReader.SheetIterator) xssfReader.getSheetsData();
		List<CommonRecord> resultList = new ArrayList<CommonRecord>();

		List<String> targetSheetList = ConfigUtil.getTargetSheet(key);
		while (iter.hasNext()) {
			InputStream stream = iter.next();
			String sheetName = iter.getSheetName();
			if (targetSheetList.isEmpty()
					|| !targetSheetList.isEmpty() && targetSheetList.contains(sheetName.trim())) {
				log.info("Read Sheet:[" + sheetName + "]");
				resultList.addAll(processSheet(styles, strings, stream, key, file));
			}
			stream.close();
		}
		return resultList;

Recommended Posts

Évitez les erreurs de bombe Zip lors de la lecture de gros fichiers avec POI
Je veux éviter OutOfMemory lors de la sortie de gros fichiers avec POI
Convertissez de gros fichiers XLSX en CSV avec Apache POI
Pour éviter les erreurs lors du démarrage de miChecker
Téléchargez des fichiers volumineux avec Apache JMeter
[Java] Lecture et écriture de fichiers avec OpenCSV