1 通過POIFSFileSystem.hasPOIFSHeader(InputStream is);判斷Excel 2003及以下
2通過POIXMLDocument.hasOOXMLHeader(InputStream is);判斷Excel 2007及以上
這種判斷,即使將excel文件后綴變換,也會正確識別,比如將.xlsx人為換成xls導入,還是能識別出為2007以上版本。
注意:傳入的InputStream用BufferedInputStream裝飾一層,如果直接傳入InputStream,如果流不支持mark/reset機制,會拋出java.io.IOException: mark/reset not supported
最后附上示例:
public static void main(String[] args)throws Exception { File file = new File("D:\\docs\\work\\需求排期安排.xlsx"); InputStream is = new FileInputStream(file); //這里用BufferedInputStream再包裝一層,可解決:mark/reset not supported問題 BufferedInputStream bis = new BufferedInputStream(is); if(POIFSFileSystem.hasPOIFSHeader(bis)) { System.out.println("2003及以下"); } if(POIXMLDocument.hasOOXMLHeader(bis)) { System.out.println("2007及以上"); } }
