我正在尝试检查我的excel文件是否已存在。如果它不存在,我想创建一个新的,如果它存在,我将删除它并创建一个新的。我编写了以下程序,但我收到了错误 - workbook = WorkbookFactory.create(instream);
错误是 - > java.lang.IllegalArgumentException:您的InputStream既不是OLE2流也不是OOXML流 在org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:89) 在tryIng.main(tryIng.java:84)
这是一个程序 - >
try {
String filePath= "C:/Users/pritik/Desktop/t1.xlsx";
File file = new File(filePath);
filePath= file.getAbsolutePath();
xlFile = new File(filePath);
if(xlFile.exists() && !xlFile.isDirectory())
xlFile.delete(); //delete if file already exists.
xlFile.createNewFile();
inStream = new FileInputStream(xlFile);
workbook = WorkbookFactory.create(inStream); // I get error at this line
String sheetName="NewSheet";
Sheet sheet = workbook.createSheet(sheetName);
FileOutputStream fOut = new FileOutputStream(xlFile);
int i,j;
xRows = xTS.length;
xCols = xTS[0].length;
for(i =0;i<xRows;i++)
{
row = sheet.createRow(i);
for(j=0;j<xCols;j++)
{
cell = row.createCell(j);
cell.setCellType(Cell.CELL_TYPE_STRING);
cell.setCellValue(xTS[i][j]);
}
}
workbook.write(fOut);
fOut.flush();
fOut.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
答案 0 :(得分:6)
不要创建一个空文件并尝试阅读它,这不会起作用。空零字节文件无效,无法加载而是让POI为您创建一个新文件,稍后您将编写该文件。
更改代码:
if(xlFile.exists() && !xlFile.isDirectory())
xlFile.delete(); //delete if file already exists.
xlFile.createNewFile();
inStream = new FileInputStream(xlFile);
workbook = WorkbookFactory.create(inStream);
改为:
if(xlFile.exists() && !xlFile.isDirectory())
xlFile.delete(); //delete if file already exists.
if (xlFile.toString().endsWith(".xls") {
workbook = new HSSFWorkbook();
} else {
workbook = new XSSFWorkbook();
}
此外,如果您确实想要阅读现有文件,如果您有文件,请不要使用流!有关原因,请参阅this bit of the POI docs。