21

私は Apache Tika を使用しており、コンテンツ タイプを反映する拡張子を持つように名前を変更する必要がある特定のコンテンツ タイプのファイル (拡張子なし) があります。

コンテンツ タイプ名に基づいてゼロからプログラミングする代わりに、何か使用できるものがあるかどうか考えてみてください。

4

4 に答える 4

34

あなたにとって重要な 2 つのクラスはMediaTypeRegistryMimeTypes です。これらを使用して、MIME タイプ マジック ベースの検出を行い、MIME タイプとその関係に関する情報を取得できます。

(とは言っても、完全な検出を行いたい場合、コンテナベースのフォーマット用に Tika Parsers jar で追加のロジックを使用してファイルを解析する可能性がある場合は、TikaConfig.getDetector()および/またはDefaultDetectorを使用する必要があります。)

// Load your Tika config, find all the Tika classes etc
TikaConfig config = TikaConfig.getDefaultConfig();

// Do the detection. Use DefaultDetector / getDetector() for more advanced detection
Metadata metadata = new Metadata();    
InputStream stream = TikaInputStream.get(new File(file), metadata);
MediaType mediaType = config.getMimeRepository().detect(stream);

// Fest the most common extension for the detected type
MimeType mimeType = config.getMimeRepository().forName(mediaType.toString());
String extension = mimeType.getExtension();
于 2011-04-04T17:46:06.440 に答える
1

ファイル tika-mimetypes.xml を見たい -> tika のソースコードをチェックアウトし、:

org.apache.tika.mime.MimeTypesReader

     } else if (nodeElement.getTagName().equals(GLOB_TAG)) {
         boolean useRegex = Boolean.valueOf(nodeElement.getAttribute(ISREGEX_ATTR));
         types.addPattern(type, nodeElement.getAttribute(PATTERN_ATTR), useRegex);

その後、機知に富んだ仕事をすることができます

org.apache.tika.mime.MimeTypes

      private Patterns patterns = new Patterns(registry);
于 2011-04-04T17:21:44.823 に答える