0

Apache Commons Compress APIを使用して、ファイルの圧縮タイプをそのコンテンツから(つまり、ファイル拡張子からではなく)確実に検出する簡単な方法はありますか?

Apache Tikaを使用すると、次のことができます

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);

type変数には、検出されたファイル コンテンツの MIME タイプ (たとえば、text/plain、application/zip など) が入ります。

理想的には、Tika が AR アーカイブ形式を "text/plain" として誤検出するように見えるという事実など、さまざまな理由から、このプロセスに Tika を関与させたくありません。AR アーカイブ形式は、Commons Compress によって作成できる形式の 1 つです。

4

1 に答える 1

1

最善の策は、ファイルから最初の数バイトを取得し、関心のあるさまざまな形式のmimeマジックバイトパターンを確認することです。

これは、Tikaに検出を依頼したときにTikaが行うことです。ただし、独自のコードを作成することはできます

ストリームを各CommonsCompressデコーダーに順番に渡し、最初に爆発しないフォーマットがフォーマットであると想定することは可能かもしれませんが、それは少し信頼できないかもしれません...

Tikaを使い続けることをお勧めします。現在、Tikaがサポートしていない形式については、検出の問題に関するバグレポートを開いてください。可能であれば、単体テストで使用できる非常に小さなテストファイルをアップロードし、可能であれば魔法の検出バイトもアップロードします。(commons compressでサポートされている形式の場合、必要に応じてcommons compressコードでヘッダーの詳細を見つけることができるはずです)

于 2011-08-22T11:35:02.630 に答える