文件按文件擴展名分類。所以我的問題是,如何識別文件類型,即使文件擴展名已被更改。即使文件擴展名已更改,如何識別文件類型?
例如,我有一個名爲myVideo.mp4
的視頻文件,我已將其更改爲myVideo.txt
。所以,如果我雙擊它,首選的文本編輯器將打開文件,並不會打開確切的內容。但是,如果我在視頻播放器中播放myVideo.txt
,則視頻將毫無問題地播放。
我只是想開發一個應用程序來確定文件的類型,而不檢查文件擴展名並建議打開文件的軟件。我想用Java開發應用程序。
文件按文件擴展名分類。所以我的問題是,如何識別文件類型,即使文件擴展名已被更改。即使文件擴展名已更改,如何識別文件類型?
例如,我有一個名爲myVideo.mp4
的視頻文件,我已將其更改爲myVideo.txt
。所以,如果我雙擊它,首選的文本編輯器將打開文件,並不會打開確切的內容。但是,如果我在視頻播放器中播放myVideo.txt
,則視頻將毫無問題地播放。
我只是想開發一個應用程序來確定文件的類型,而不檢查文件擴展名並建議打開文件的軟件。我想用Java開發應用程序。
結構,幻數,元數據,字符串和正則表達式,啓發式和統計分析...該工具將只爲好背後的規則數據庫。
嘗試DROID(Digital Record Object IDentification tool)用於識別文件類型; Java,Net BSD許可。這是英國國家檔案館的一個免費項目,與Android無關。來源可在Github和Sourceforge上找到。 DROID documentation很好。
+1 DROID實際上是一個非常令人印象深刻的庫。我不相信我忘了它。 – Adi 2013-03-22 11:13:47
好吧,它就像有一個文件格式的數據庫,你想閱讀而不必在你的應用程序中尋找擴展名。就像Linux一樣。所以,無論何時打開文件,都需要檢查文件格式數據庫的類型。雖然不知道它如何適用於不同的文件類型,但大多數文件具有固定的標題格式,無論是zip,pdf,mpg,avi,png等。所以這種方法應該工作
下面的代碼片段檢索有關文件類型信息
final File file = new File("file.txt");
System.out.println("File type is: " + new MimetypesFileTypeMap().getContentType(file));
希望,它可以幫助你
這是否確實有效。 Doc聲明「這個類擴展了FileTypeMap,並通過它們的文件擴展名**提供了文件**的數據輸入。」但OP希望「識別文件類型,即使**文件擴展名已被更改**」 – CodesInChaos 2013-03-22 08:57:13
你是對的,它不是 - 它取決於文件擴展名 – 2013-03-22 09:02:12
一個最好的圖書館做,這是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);
}
}
谷歌「文件頭」和「幻數」... – Ayrx 2013-03-22 03:12:38