Javaでファイルタイプを判断する方法

WBOY
リリース: 2023-04-22 13:46:07
転載
2571 人が閲覧しました

1. ファイル拡張子に基づいて決定します

  • 利点: 高速、シンプルなコード

  • 欠点: 一部の偽のファイルやサフィックス名のないファイルなど、実際のファイルの種類を判断できません

2。ファイル フロー 最初の数文字を決定する

利点: 実際のファイル タイプを決定できる

欠点: 速度が遅く、コードが複雑

以下では、各メソッドをテストして検証します。テスト ファイルは次のとおりです。

  1. ##test.png: 拡張子名が test.png# の通常の png ファイルを作成します。

  2. ##test.doc: 上記の test.png ファイルをコピーし、ファイル名を test.doc
に変更します。 1. ファイルを使用します。 .probeContentType

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を呼び出してタイプを解決します。 Javaでファイルタイプを判断する方法

ただし、デフォルトの実装はオペレーティング システム固有であり、使用しているオペレーティング システムによっては失敗する可能性があります。

#結論: ファイル拡張子に基づいて判断してください。

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(); }
ログイン後にコピー

結果:

##結論: ジャッジファイル ストリームの最初の数文字に基づきます。実際のファイルの種類を特定できますが、この方法の主な欠点は非常に遅いことです。

Javaでファイルタイプを判断する方法

2.2guessContentTypeFromName

public void test(){     File file = new File("d:/test.png");     String mimeType = URLConnection.guessContentTypeFromName(file.getName()); }
ログイン後にコピー
の使用結果:

##このメソッドは、内部 FileNameMap を使用して MIME タイプを決定します。

#結論: ファイル拡張子に基づいて判断してください。

Javaでファイルタイプを判断する方法

#2.3guessContentTypeFromStreamの使用

#

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() メソッドを使用することです: Javaでファイルタイプを判断する方法

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>
ログイン後にコピー

結論: ファイル拡張子で判断します。

Javaでファイルタイプを判断する方法

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 CommunityJavaでファイルタイプを判断する方法

プログラムによって、ユーザーの META-INF/mime.types という名前の MimetypesFileTypeMap インスタンス

mime.types
  1. という名前のエントリを追加します。ホームディレクトリ META-INF/mimetypes.default という名前のリソース (通常は activity.jar ファイル内でのみ見つかります)
  2. ただし、ファイルが見つからない場合は、application/octet が返されます。 - 応答のストリーム。
  3. 結論: ファイル拡張子に基づいて判断してください。

  4. 4. jmimemagicjMimeMagic
  5. の使用は、ファイルの MIME タイプを取得するために使用できる制限付きライセンス ライブラリです。
  6. Maven の依存関係を構成する:

    <dependency>     <groupid>net.sf.jmimemagic</groupid>     <artifactid>jmimemagic</artifactid>     <version>0.1.5</version> </dependency>
    ログイン後にコピー
    次に、このライブラリの使用方法を検討します:
  7. public void test() {         File file = new File("d:/test.doc");         MagicMatch match = Magic.getMagicMatch(file, false);         System.out.println(match.getMimeType()); }
    ログイン後にコピー
このライブラリはデータ ストリームを処理できるため、ファイルが存在する必要はありませんファイルシステムの真ん中にあります。 #########結果:######

Javaでファイルタイプを判断する方法

结论:根据文件流中前几个字符判断。

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でファイルタイプを判断する方法

结论:根据文件流中前几个字符判断。

以上がJavaでファイルタイプを判断する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート