Javaでファイルタイプを判断する方法
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); }
:
# #結論: ファイル ストリームの最初の数文字に基づいて判断してください。
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 サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









Java の乱数ジェネレーターのガイド。ここでは、Java の関数について例を挙げて説明し、2 つの異なるジェネレーターについて例を挙げて説明します。

Java の Weka へのガイド。ここでは、weka java の概要、使い方、プラットフォームの種類、利点について例を交えて説明します。

この記事では、Java Spring の面接で最もよく聞かれる質問とその詳細な回答をまとめました。面接を突破できるように。

Java 8は、Stream APIを導入し、データ収集を処理する強力で表現力のある方法を提供します。ただし、ストリームを使用する際の一般的な質問は次のとおりです。 従来のループにより、早期の中断やリターンが可能になりますが、StreamのForeachメソッドはこの方法を直接サポートしていません。この記事では、理由を説明し、ストリーム処理システムに早期終了を実装するための代替方法を調査します。 さらに読み取り:JavaストリームAPIの改善 ストリームを理解してください Foreachメソッドは、ストリーム内の各要素で1つの操作を実行する端末操作です。その設計意図はです

Java での日付までのタイムスタンプに関するガイド。ここでは、Java でタイムスタンプを日付に変換する方法とその概要について、例とともに説明します。

カプセルは3次元の幾何学的図形で、両端にシリンダーと半球で構成されています。カプセルの体積は、シリンダーの体積と両端に半球の体積を追加することで計算できます。このチュートリアルでは、さまざまな方法を使用して、Javaの特定のカプセルの体積を計算する方法について説明します。 カプセルボリュームフォーミュラ カプセルボリュームの式は次のとおりです。 カプセル体積=円筒形の体積2つの半球体積 で、 R:半球の半径。 H:シリンダーの高さ(半球を除く)。 例1 入力 RADIUS = 5ユニット 高さ= 10単位 出力 ボリューム= 1570.8立方ユニット 説明する 式を使用してボリュームを計算します。 ボリューム=π×R2×H(4
