2011-08-20 70 views
0

壓縮類型是否有從其內容可靠地檢測出文件的壓縮類型的快速方法(即,不從文件擴展名),使用Apache的百科全書壓縮 API?檢測通過Apache共享壓縮

使用阿帕奇提卡,可以做

Tika tika = new Tika(); 
String path = <the full path to the file examined, including the filename>; 
FileInputStream fis = new FileInputStream(new File(path)); 
String type = tika.detect(fis); 

類型變量被填充有檢測MIME類型的文件內容(例如,文本/無格式,應用程序/壓縮等)。

理想情況下,我想避免在這個過程中涉及Tika,原因很多,包括Tika似乎錯誤地檢測爲AR文檔格式的文本/簡單格式,這是由Commons Compress生成的格式。

+0

我建議你爲AR格式問題打開一個Tika bug,並且包含一個非常小的樣本用於單元測試的文件 – Gagravarr

回答

1

你最好的選擇可能是搶從文件的前幾個字節,並檢查他們爲你所感興趣的各種格式的MIME魔力字節模式。

這是提卡會做當你要求它做檢測時。然而,你可以編碼自己的一個

它可能會依次傳遞流到每個Commons Compress解碼器,並假定第一個不爆炸是格式,但這可能有點不可靠。 ..

我建議你堅持使用Tika,並且對於Tika當前不支持的任何格式,請爲檢測問題打開bug report。如果可以的話,上傳一個非常小的測試文件,可以在單元測試中使用,如果可能的話,還可以使用神奇的檢測字節。 (對於commons compress支持的格式,如果需要,你應該能夠在commons compress代碼中找到頭文件的詳細信息)

+1

Commons壓縮「自動檢測」代碼按照您的建議工作,正如我在此期間發現的那樣,我認爲現在比Tika更好。無論如何,我沒有提交關於此的Tika問題(請參閱https://issues.apache.org/jira/browse/TIKA-697),請遵循您提供的鏈接。謝謝! – PNS