2013-03-22 58 views
2

文件按文件擴展名分類。所以我的問題是,如何識別文件類型,即使文件擴展名已被更改。即使文件擴展名已更改,如何識別文件類型?

例如,我有一個名爲myVideo.mp4的視頻文件,我已將其更改爲myVideo.txt。所以,如果我雙擊它,首選的文本編輯器將打開文件,並不會打開確切的內容。但是,如果我在視頻播放器中播放myVideo.txt,則視頻將毫無問題地播放。

我只是想開發一個應用程序來確定文件的類型,而不檢查文件擴展名並建議打開文件的軟件。我想用Java開發應用程序。

+0

谷歌「文件頭」和「幻數」... – Ayrx 2013-03-22 03:12:38

回答

3

結構,幻數,元數據,字符串和正則表達式,啓發式和統計分析...該工具將只爲好背後的規則數據庫。

嘗試DROID(Digital Record Object IDentification tool)用於識別文件類型; Java,Net BSD許可。這是英國國家檔案館的一個免費項目,與Android無關。來源可在Github和Sourceforge上找到。 DROID documentation很好。

Darwinsys filelibmagic見。

+1

+1 DROID實際上是一個非常令人印象深刻的庫。我不相信我忘了它。 – Adi 2013-03-22 11:13:47

0

有一個名爲TrID的工具,它可以完成你以後的工作 - 它目前支持5033種不同的文件類型 - 可以用trained添加新類型。在* nix系統上,還有file命令,它執行類似的操作。

+0

TrID不是平臺無關的。我想以平臺獨立的方式來做到這一點。 – Maximin 2013-03-22 04:12:29

+0

TrID聲稱支持Linux,但我不能說我自己試過。 – 2013-03-22 04:16:38

+0

是的,這是真的。但我不能在Windows中使用* nix中使用的相同應用程序。這就是爲什麼我正在考慮使用Java。 – Maximin 2013-03-22 04:33:53

0

好吧,它就像有一個文件格式的數據庫,你想閱讀而不必在你的應用程序中尋找擴展名。就像Linux一樣。所以,無論何時打開文件,都需要檢查文件格式數據庫的類型。雖然不知道它如何適用於不同的文件類型,但大多數文件具有固定的標題格式,無論是zip,pdf,mpg,avi,png等。所以這種方法應該工作

0

您可以試試MimeUtil2,但它已經很老了,雖然不是up2date。最好的方式仍然是文件擴展名。

但是Adam的解決方案並沒有你想象的那麼糟糕。您可以使用圍繞命令行調用的包裝來構建獨立於平臺的解決方案。我想你會用這種方法得到更好的結果。

+0

項目網站顯示爲不可用。我試圖用純java來實現它。 – Maximin 2013-03-22 11:28:02

+0

是的Sourceforge頁面是唯一可用的頁面。 – Adrian 2013-03-22 13:29:17

-1

下面的代碼片段檢索有關文件類型信息

final File file = new File("file.txt"); 
System.out.println("File type is: " + new MimetypesFileTypeMap().getContentType(file)); 

希望,它可以幫助你

+2

這是否確實有效。 Doc聲明「這個類擴展了FileTypeMap,並通過它們的文件擴展名**提供了文件**的數據輸入。」但OP希望「識別文件類型,即使**文件擴展名已被更改**」 – CodesInChaos 2013-03-22 08:57:13

+0

你是對的,它不是 - 它取決於文件擴展名 – 2013-03-22 09:02:12

5

一個最好的圖書館做,這是Apache Tika。它不僅可以讀取文件的標題,還可以執行內容分析來檢測文件類型。使用提卡很簡單,這裏的檢測文件的類型的例子:

import java.net.URL; 
import org.apache.tika.Tika; //Including Tika 

public class TestTika { 

    public static void main(String[] args) { 
     Tika tika = new Tika(); 
     String fileType = tika.detect(new URL("http://example.com/someFile.jpg")); 
     System.out.println(fileType); 
    } 

}