Java 无法使用ApachePOI打开excel-获取异常

Java 无法使用ApachePOI打开excel-获取异常,java,apache-poi,Java,Apache Poi,在尝试使用ApachePOI打开excel时,我发现 org.apache.poi.openxml4j.exceptions.invalidooperationexception:无法打开指定的文件:“C:\Users\mdwaipay\AppData\Local\Temp\poifiles\poi-ooxml-1570030023.tmp” 我查过了。没有创建这样的文件夹。我使用的是ApachePOI版本3.6 有什么帮助吗?类似的代码在不同的工作区中运行良好。我在这里不知所措 代码: 为什么

在尝试使用ApachePOI打开excel时,我发现

org.apache.poi.openxml4j.exceptions.invalidooperationexception:无法打开指定的文件:“C:\Users\mdwaipay\AppData\Local\Temp\poifiles\poi-ooxml-1570030023.tmp”

我查过了。没有创建这样的文件夹。我使用的是ApachePOI版本3.6

有什么帮助吗?类似的代码在不同的工作区中运行良好。我在这里不知所措

代码:


为什么你要把一个非常好的文件打包成一个
InputStream
,然后让POI为你缓冲整个文件,这样它就可以进行随机访问?如果您直接将文件传递给POI,生活会更好,因此它可以根据需要跳过

如果要同时使用XSSF(.xlsx)和HSSF(.xls),请将代码更改为

公共Xls_读取器(字符串路径){
this.path=path;
试试{
文件f=新文件(路径);
工作簿=WorkbookFactory.create(f);
工作表=工作簿。getSheetAt(0);
}捕获(例外e){
e、 printStackTrace();
} 
}
如果您只需要XSSF支持,和/或需要完全控制资源关闭的时间,请执行以下操作

OPCPackage pkg=OPCPackage.open(路径);
工作簿wb=新XSSF工作簿(包装);
//使用工作簿
//当您不再需要它时,立即关闭并释放文件资源
pkg.close();

为什么你要把一个非常好的文件打包成一个
输入流
,然后让POI为你缓冲整个文件,这样它就可以进行随机访问?如果您直接将文件传递给POI,生活会更好,因此它可以根据需要跳过

如果要同时使用XSSF(.xlsx)和HSSF(.xls),请将代码更改为

公共Xls_读取器(字符串路径){
this.path=path;
试试{
文件f=新文件(路径);
工作簿=WorkbookFactory.create(f);
工作表=工作簿。getSheetAt(0);
}捕获(例外e){
e、 printStackTrace();
} 
}
如果您只需要XSSF支持,和/或需要完全控制资源关闭的时间,请执行以下操作

OPCPackage pkg=OPCPackage.open(路径);
工作簿wb=新XSSF工作簿(包装);
//使用工作簿
//当您不再需要它时,立即关闭并释放文件资源
pkg.close();

您使用的excel版本是什么。为什么不使用最新版本的Apache POI?非常感谢你的关注@斯瓦米:它与另一个excel很好地配合。都是。xlsx知道原因是什么吗P@Gagravarr:也更新了版本。:)你是怎么打开文件的?使用
文件
对象还是
输入流
对象?如果是后者,您是否尝试过前者?您使用的excel版本是什么?为什么不使用最新版本的ApachePOI?非常感谢你的关注@斯瓦米:它与另一个excel很好地配合。都是。xlsx知道原因是什么吗P@Gagravarr:也更新了版本。:)你是怎么打开文件的?使用
文件
对象还是
输入流
对象?如果是后者,你试过前者了吗?谢谢。在升级我的POI并使用新的excel后,我修复了这个问题。即使使用新版本,如果可以的话,也可以从文件打开,而不是从输入流打开,这样会更快,并且使用更少的内存库。在升级我的POI并使用新的excel后,我修复了这个问题。即使使用新版本,如果可以的话,也可以从文件打开,而不是从InputStream打开,这样会更快,占用更少的内存
public Xls_Reader(String path) {
  this.path=path; 
  try { 
      fis = new FileInputStream(path); 
      workbook = new XSSFWorkbook(fis); 
      sheet = workbook.getSheetAt(0); 
      fis.close(); 
  }
  catch (Exception e) 
  { e.printStackTrace(); 
  } 
}