[英]Reading Excel by Apache POI and Java web application but showing error as “java.io.IOException: org/apache/commons/compress/archivers/zip/ZipFile”
[英]How to solve java.io.IOException: Read error when reading Excel file using apache POI
我正在尝试使用Apache POI读取Excel文件,但出现读取错误异常。
public class ReadExcelFileToList {
public static void main(String[] args) throws IOException {
InputStream input = null;
try {
input = new FileInputStream(
"C:\\Users\\jeet.chatterjee\\Downloads\\Book1.xls");
System.out.println("file is found");
POIFSFileSystem fs = new POIFSFileSystem(input);
XSSFWorkbook wb = new XSSFWorkbook(input);
XSSFSheet sheet = wb.getSheetAt(0);
Iterator rows = sheet.rowIterator();
while (rows.hasNext()) {
XSSFRow row = (XSSFRow) rows.next();
System.out.println("\n");
Iterator cells = row.cellIterator();
while (cells.hasNext()) {
XSSFCell cell = (XSSFCell) cells.next();
if (XSSFCell.CELL_TYPE_STRING == cell.getCellType())
System.out.print(cell.getStringCellValue() + " ");
else if (XSSFCell.CELL_TYPE_STRING == cell.getCellType())
System.out.print(cell.getStringCellValue() + " ");
else if (XSSFCell.CELL_TYPE_STRING == cell.getCellType())
System.out.print(cell.getStringCellValue() + " ");
else
System.out.print("Unknown cell type");
}
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
异常日志是
file is found
java.io.IOException: Read error
at java.io.FileInputStream.readBytes(Native Method)
at java.io.FileInputStream.read(Unknown Source)
at java.io.FilterInputStream.read(Unknown Source)
at java.io.PushbackInputStream.read(Unknown Source)
at java.util.zip.ZipInputStream.readFully(Unknown Source)
at java.util.zip.ZipInputStream.readLOC(Unknown Source)
at java.util.zip.ZipInputStream.getNextEntry(Unknown Source)
at org.apache.poi.openxml4j.util.ZipInputStreamZipEntrySource.<init>(ZipInputStreamZipEntrySource.java:51)
at org.apache.poi.openxml4j.opc.ZipPackage.<init>(ZipPackage.java:83)
at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:228)
at org.apache.poi.util.PackageHelper.open(PackageHelper.java:39)
at org.apache.poi.xssf.usermodel.XSSFWorkbook.<init>(XSSFWorkbook.java:187)
at com.mj.test.ReadExcelFileToList.main(ReadExcelFileToList.java:32)
尝试读取此Excel文件时收到此错误。
您在代码中使用了相同的输入流多次。即,您多次读取了相同的输入流。 这就是引发此错误的原因。 您需要重新创建流。
input = new FileInputStream("C:\\Users\\jeet.chatterjee\\Downloads\\Book1.xls");
//Using same inputstream is not correct
//Comment the below line
//POIFSFileSystem fs = new POIFSFileSystem(input);
XSSFWorkbook wb = new XSSFWorkbook(input);
附带说明,您必须在使用流后关闭流。 我在您的代码中看不到它。
我也尝试相同的事情..您应该尝试这个..我的优势是data.xlsx。 您应该使用FileInputStream而不是POIFSFileSystem
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Iterator;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class JavaApplication3 {
public static void main(String[] args) {
try {
FileInputStream file = new FileInputStream(new File("E:/data.xlsx"));
XSSFWorkbook wb = new XSSFWorkbook(file);
XSSFSheet sheet = wb.getSheetAt(0);
Iterator rows = sheet.rowIterator();
while (rows.hasNext()) {
XSSFRow row = (XSSFRow) rows.next();
System.out.println("\n");
Iterator cells = row.cellIterator();
while (cells.hasNext()) {
XSSFCell cell = (XSSFCell) cells.next();
if (XSSFCell.CELL_TYPE_NUMERIC == cell.getCellType()) {
System.out.print(cell.getNumericCellValue() + " ");
} else if (XSSFCell.CELL_TYPE_STRING == cell.getCellType()) {
System.out.print(cell.getStringCellValue() + " ");
} else if (XSSFCell.CELL_TYPE_BOOLEAN == cell.getCellType()) {
System.out.print(cell.getBooleanCellValue() + " ");
} else if (XSSFCell.CELL_TYPE_BLANK == cell.getCellType()) {
System.out.print("BLANK ");
} else {
System.out.print("Unknown cell type");
}
}
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.