2

ファイルはファイル拡張子によって分類されます。私の質問は、ファイル拡張子が変更されていてもファイルの種類を識別する方法です。

たとえば、名前が のビデオ ファイルがあり、myVideo.mp4それを に変更しましたmyVideo.txt。そのため、それをダブルクリックすると、優先テキスト エディターがファイルを開き、正確なコンテンツは開きません。しかし、myVideo.txtビデオプレーヤーで再生すると、ビデオは問題なく再生されます。

ファイル拡張子をチェックせずにファイルの種類を判断するアプリケーションを開発し、ファイルを開くためのソフトウェアを提案することを考えていました。アプリケーションを Java で開発したいと考えています。

4

6 に答える 6

5

これを行うのに最適なライブラリの 1 つはApache Tikaです。ファイルのヘッダーを読み取るだけでなく、コンテンツ分析を実行してファイルの種類を検出することもできます。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);
    }

}
于 2013-03-22T11:03:38.380 に答える
4

構造、マジック ナンバー、メタデータ、文字列と正規表現、ヒューリスティックスと統計分析... ツールは、その背後にあるルールのデータベースと同じくらい優れています。

ファイルの種類を識別するためにDROID ( Digital Record Object IDentification tool ) を試してください。Java、Net BSD ライセンス。これは、Android とは関係のない、英国国立公文書館の無料プロジェクトです。ソースは Github と Sourceforge で入手できます。DROID のドキュメントは適切です。

Darwinsys ファイルlibmagicも参照してください。

于 2013-03-22T11:09:33.017 に答える
0

MimeUtil2を試すこともできますが、かなり古く、up2date ではありません。最良の方法は、やはりファイル拡張子です。

しかし、Adam のソリューションは、あなたが思っているほど悪くはありません。コマンドライン呼び出しのラッパーを使用して、プラットフォームに依存しないソリューションを構築できます。この方法を使用すると、より良い結果が得られると思います。

于 2013-03-22T08:20:09.867 に答える
0

あなたが求めていることを行うTrIDと呼ばれるツールがあります-現在、5033の異なるファイルタイプをサポートしており、新しいタイプを追加するようにトレーニングできます. *nix システムでfileは、同様のことを行うコマンドもあります。

于 2013-03-22T03:50:11.930 に答える
0

それは、アプリで拡張子を探すことなく読みたいファイル形式のデータベースを持っているようなものです。Linux とまったく同じです。そのため、ファイルを開くたびに、ファイルがどのタイプのファイル形式データベースに属しているかを確認する必要があります。さまざまなファイルタイプでどのように機能するかはわかりませんが、ほとんどのファイルは、zip、pdf、mpg、avi、png などのヘッダー形式が固定されているため、このアプローチは機能するはずです

于 2013-03-22T07:50:34.760 に答える
-3

次のコード スニペットは、ファイル タイプに関する情報を取得します。

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

うまくいけば、それはあなたを助けるかもしれません

于 2013-03-22T08:32:46.530 に答える