2015-07-11 33 views
3

基於文件內容(而不是擴展名)來檢測真正的文件類型我使用apache Tika。如何檢查文件內容的真實形象

我寫了下面的代碼:

InputStream theInputStream = new FileInputStream("D:\\video.mp4"); 
    try (InputStream is = theInputStream; 
      BufferedInputStream bis = new BufferedInputStream(is);) { 
     AutoDetectParser parser = new AutoDetectParser(); 
     Detector detector = parser.getDetector(); 
     Metadata md = new Metadata(); 
     MediaType mediaType = detector.detect(bis, md); 
     mediaType.getBaseType().compareTo(MediaType)) 
     System.out.println(mediaType); 
    } 

這段代碼輸出image/jpeg

這是事實,因爲我改變了文件擴展名。
現在我想檢查該文件是圖像。
我無法在MediaType類中找到枚舉。
現在我只知道以下方式:

mediaType.toString().startsWith("image"); 

但這個代碼看起來醜陋。
你能提供更好的解決方案嗎?

+0

這絕對是正確的方式。 – Jason

+0

@Jason'MediaType'的'toString()'方法沒有記錄在API文檔中,所以我不會依賴於... – haraldK

回答

0

您會看到MediaType有一個getType()和一個getSubtype()方法。你在找什麼是類型(即"image/*")。在這種情況下,子類型將是"jpeg"

所以你的測試應該是:

if (mediaType.getType().equals("image")) { 
    // Deal with image 
}