以下是代码: -
try {
ByteArrayInputStream bis = new ByteArrayInputStream(file.getBytes());
if (file.getOriginalFilename().endsWith(Constants.XLS_EXTENSION)) {
return new HSSFWorkbook(bis);
} else if (file.getOriginalFilename().endsWith(Constants.XLSX_EXTENSION)) {
return new XSSFWorkbook(bis);
} else {
throw new IllegalArgumentException("Received file does not have a standard excel extension.");
}
} catch (IOException | IllegalArgumentException e) {
log.error("Exception while reading the file", e);
}
return null;
在读取xls格式文件时出错。
以下是例外: -
2016-05-27 11:48:24 --- [http-nio-6060-exec-1] ERROR com.atms.web.rest.controllers.TestCaseResource:912 - 读取文件时出现异常
java.io.IOException:无法读取整个标头;读取181个字节;预计512字节
答案 0 :(得分:2)
我还没有看过之前用过的ByteArrayInputStream
。你确定不是问题吗?
从快速指南:https://poi.apache.org/spreadsheet/quick-guide.html#FileInputStream
// Use a file
Workbook wb = WorkbookFactory.create(new File("MyExcel.xls"));
// Use an InputStream, needs more memory
Workbook wb = WorkbookFactory.create(new FileInputStream("MyExcel.xls"));
如果直接使用HSSFWorkbook或XSSFWorkbook,通常应该通过NPOIFSFileSystem或OPCPackage来完全控制生命周期(包括完成后关闭文件):
// HSSFWorkbook, File
NPOIFSFileSystem fs = new NPOIFSFileSystem(new File("file.xls"));
HSSFWorkbook wb = new HSSFWorkbook(fs.getRoot(), true);
....
fs.close();
// HSSFWorkbook, InputStream, needs more memory
NPOIFSFileSystem fs = new NPOIFSFileSystem(myInputStream);
HSSFWorkbook wb = new HSSFWorkbook(fs.getRoot(), true);
....
fs.close();
尝试其中之一,然后如果您仍有问题,我们可以研究其他问题的可能性。