1. ファイル拡張子に基づいて決定します
利点: 高速、シンプルなコード
-
欠点: 一部の偽のファイルやサフィックス名のないファイルなど、実際のファイルの種類を判断できません
2。ファイル フロー 最初の数文字を決定する
利点: 実際のファイル タイプを決定できる
欠点: 速度が遅く、コードが複雑
以下では、各メソッドをテストして検証します。テスト ファイルは次のとおりです。
- ##test.png: 拡張子名が test.png# の通常の png ファイルを作成します。 ##test.doc: 上記の test.png ファイルをコピーし、ファイル名を test.doc
Java 1.7 以降、MIME タイプを解決するメソッドが提供されています。 Files.probeContentType:
public static void test() throws IOException { Path path = new File("d:/test.png").toPath(); String mimeType = Files.probeContentType(path); System.out.println(mimeType); }結果:
#このメソッドは、インストールされている FileTypeDetector 実装を利用して MIME タイプを検出します。各実装のprobeContentTypeを呼び出してタイプを解決します。
ただし、デフォルトの実装はオペレーティング システム固有であり、使用しているオペレーティング システムによっては失敗する可能性があります。
#結論: ファイル拡張子に基づいて判断してください。
2. URLConnection の使用
URLConnection は、ファイルの MIME タイプを検出するための API をいくつか提供します。
2.1 getContentType の使用public void test(){ File file = new File("d:/test.png"); URLConnection connection = file.toURL().openConnection(); String mimeType = connection.getContentType(); }
結果:
##結論: ジャッジファイル ストリームの最初の数文字に基づきます。実際のファイルの種類を特定できますが、この方法の主な欠点は非常に遅いことです。
public void test(){ File file = new File("d:/test.png"); String mimeType = URLConnection.guessContentTypeFromName(file.getName()); }
の使用結果:
##このメソッドは、内部 FileNameMap を使用して MIME タイプを決定します。
#結論: ファイル拡張子に基づいて判断してください。
#
public static void test() throws Exception { FileInputStream inputFile = new FileInputStream("d:/test.doc"); String mimeType = URLConnection.guessContentTypeFromStream(new BufferedInputStream(inputFile)); System.out.println(mimeType); }#Result
:
# #結論: ファイル ストリームの最初の数文字に基づいて判断してください。
2.4 getFileNameMap の使用
URLConnection を使用して MIME タイプを取得するより迅速な方法は、getFileNameMap() メソッドを使用することです:
public void test(){ File file = new File("d:/test.png"); FileNameMap fileNameMap = URLConnection.getFileNameMap(); String mimeType = fileNameMap.getContentTypeFor(file.getName()); }
結果 :
このメソッドは、URLConnection のすべてのインスタンスで使用される MIME タイプ テーブルを返します。このテーブルは、入力ファイルの種類を解析するために使用されます。
MIME タイプの組み込みテーブルは、URLConnection に関しては非常に限られています。
デフォルトでは、このクラスは content-types.properties ファイルを使用し、そのディレクトリは JRE_HOME/lib です。ただし、content.types.user.table プロパティを使用してユーザー固有のテーブルを指定することで、これを拡張できます。 System.setProperty("content.types.user.table","<path-to-file>");</path-to-file>
3. MimeTypesFileTypeMap を使用する
このクラスは Java 6 に付属しているため、JDK 1.6 を使用する場合に非常に便利です。public void test() { File file = new File("product.png"); MimetypesFileTypeMap fileTypeMap = new MimetypesFileTypeMap(); String mimeType = fileTypeMap.getContentType(file.getName()); }結果:
ここで、ファイル名またはファイル インスタンス自体をパラメーターとして関数に渡すことができます。ただし、File インスタンスを引数として受け取る関数は、ファイル名を引数として受け取るオーバーロードされたメソッドを内部的に呼び出します。
このメソッドは内部的に、型解決のために mime.types という名前のファイルを探します。この方法は特定の順序でファイルを検索することに注意することが重要です:Hongmeng 公式戦略的協力と共同構築 - HarmonyOS Technology Community
mime.types
- という名前のエントリを追加します。ホームディレクトリ META-INF/mimetypes.default という名前のリソース (通常は activity.jar ファイル内でのみ見つかります)
- ただし、ファイルが見つからない場合は、application/octet が返されます。 - 応答のストリーム。
- 結論: ファイル拡張子に基づいて判断してください。 4. jmimemagicjMimeMagic
- の使用は、ファイルの MIME タイプを取得するために使用できる制限付きライセンス ライブラリです。
- Maven の依存関係を構成する:
<dependency> <groupid>net.sf.jmimemagic</groupid> <artifactid>jmimemagic</artifactid> <version>0.1.5</version> </dependency>
次に、このライブラリの使用方法を検討します:
public void test() { File file = new File("d:/test.doc"); MagicMatch match = Magic.getMagicMatch(file, false); System.out.println(match.getMimeType()); }
结论:根据文件流中前几个字符判断。
5. 使用Apache TikaApache Tika
是一个工具集,可检测并从各种文件中提取元数据和文本。它具有丰富而强大的API,并带有[tika-core],我们可以利用它来检测文件的MIME类型。
配置Maven依赖:
<dependency> <groupid>org.apache.tika</groupid> <artifactid>tika-core</artifactid> <version>1.18</version> </dependency>
接下来,我们将使用detect()方法来解析类型:
public void whenUsingTika_thenSuccess() { File file = new File("d:/test.doc"); Tika tika = new Tika(); String mimeType = tika.detect(file); }
结果:
结论:根据文件流中前几个字符判断。
以上がJavaでファイルタイプを判断する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

メモ帳++7.3.1
使いやすく無料のコードエディター
