因工作需要解析excel文檔,用poi插件來進行處理,但是2003版本之前的和2007版本之後的解析方式不一樣,開始,我們是以後綴名來區分的(2003之前是xls,2007之後是xlsx),後來發現,如果一個2003文檔的後綴名被改成xlsx或反之,解析都會出現一些莫名其妙的問題,所以根據文檔內容來判斷版本是非常必要的。於是在網上找了很久終於找到一個切實可行的方法,代碼如下
public static void main(String[] args) {
File f = new File("d://test2.xls");
InputStream inp = null;
try {
inp = new FileInputStream(f);
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
if(! inp.markSupported()) {
inp = new PushbackInputStream(inp, 8);//封裝下輸入流,使得以下方法獲取輸入流的內容而不破壞輸入流內容
}
try {
if(POIFSFileSystem.hasPOIFSHeader(inp)) {
System.out.println("2003及以下");
}
if(POIXMLDocument.hasOOXMLHeader(inp)) {
System.out.println("2007及以上");
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
其中POIFSFileSystem和POIXMLDocument用到了poi-3.5-FINAL-20090928.jar、poi-ooxml-3.5-FINAL-20090928.jar、poi-ooxml-schemas-3.9-20121203.jar、xmlbeans-2.3.0.jar等jar