Maison  >  Article  >  Java  >  Comment déterminer le type de fichier en Java

Comment déterminer le type de fichier en Java

WBOY
WBOYavant
2023-04-22 13:46:072547parcourir

1. Déterminer en fonction de l'extension du fichier

  • Avantages : Vitesse rapide, code simple

  • Inconvénients : Impossible de déterminer le type de fichier réel, comme certains faux fichiers ou fichiers sans suffixe.

2. Déterminer en fonction des premiers caractères du flux de fichiers

Avantages : Peut déterminer le type de fichier réel

Inconvénients : Vitesse lente, code complexe

Je vais discuter de chaque méthode ci-dessous , allez tester et vérifier, le fichier de test est le suivant :

  1. test.png : Créez un fichier png normal avec le nom d'extension test.png

  2. test.doc : Copiez le fichier test.png ci-dessus et modifiez-le Son nom de fichier est test.doc

1. À partir de Files.probeContentType

Java1.7, une méthode de résolution des types MIME est fournie 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); }

Résultat :

Comment déterminer le type de fichier en Java

Cette méthode utilise l'implémentation FileTypeDetector installée pour détecter les types MIME. Il appelle le probeContentType de chaque implémentation pour résoudre le type.

Cependant, son implémentation par défaut est spécifique au système d'exploitation et peut échouer en fonction du système d'exploitation que nous utilisons.

Conclusion : jugement basé sur l'extension du fichier.

2. Utilisation d'URLConnection

URLConnection fournit plusieurs API pour détecter le type MIME des fichiers.

2.1 Utilisation de getContentType

public void test(){     File file = new File("d:/test.png");     URLConnection connection = file.toURL().openConnection();     String mimeType = connection.getContentType(); }

Résultat :

Comment déterminer le type de fichier en Java

Conclusion : jugement basé sur les premiers caractères du flux de fichiers. Capable de déterminer le type réel du fichier, cependant, le principal inconvénient de cette méthode est qu'elle est très lente.

2.2 Utilisez GuessContentTypeFromName

public void test(){     File file = new File("d:/test.png");     String mimeType = URLConnection.guessContentTypeFromName(file.getName()); }

Result :

Comment déterminer le type de fichier en Java

Cette méthode utilise le FileNameMap interne pour déterminer le type MIME.

Conclusion : jugement basé sur l'extension du fichier.

2.3 Utilisation de GuessContentTypeFromStream

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:

Comment déterminer le type de fichier en Java

Conclusion : jugement basé sur les premiers caractères du flux de fichiers.

2.4 Utilisation de getFileNameMap

Un moyen plus rapide d'obtenir le type MIME à l'aide d'URLConnection consiste à utiliser la méthode getFileNameMap() :

public void test(){     File file = new File("d:/test.png");     FileNameMap fileNameMap = URLConnection.getFileNameMap();     String mimeType = fileNameMap.getContentTypeFor(file.getName()); }

Result:

Comment déterminer le type de fichier en Java

Cette méthode renvoie un tableau des types MIME utilisés par toutes les instances de URLConnection . Ce tableau est ensuite utilisé pour analyser les types de fichiers d'entrée.

Le tableau intégré des types MIME est très limité en ce qui concerne URLConnection.

Par défaut, cette classe utilise le fichier content-types.properties et son répertoire est JRE_HOME/lib. Cependant, nous pouvons l'étendre en spécifiant une table spécifique à l'utilisateur à l'aide de la propriété content.types.user.table :

System.setProperty("content.types.user.table","<path-to-file>");</path-to-file>

Conclusion : à en juger par l'extension du fichier.

3. Utilisation de MimeTypesFileTypeMap

Cette classe est livrée avec Java 6, elle est donc très pratique lors de l'utilisation du JDK 1.6.

public void test() {     File file = new File("product.png");     MimetypesFileTypeMap fileTypeMap = new MimetypesFileTypeMap();     String mimeType = fileTypeMap.getContentType(file.getName()); }

Résultat :

Comment déterminer le type de fichier en Java

Ici, nous pouvons passer le nom du fichier ou l'instance du fichier elle-même en tant que paramètre à la fonction. Cependant, les fonctions qui prennent une instance de File comme argument appellent en interne une méthode surchargée qui accepte un nom de fichier comme argument.

En interne, cette méthode recherche un fichier nommé mime.types pour la résolution de type. Il est important de noter que cette méthode recherche les fichiers dans un ordre spécifique :

  1. Coopération stratégique et co-construction officielle de Hongmeng - Communauté technologique HarmonyOS

  2. Ajoutez par programme des entrées à l'instance MimetypesFileTypeMap

  3. dans le répertoire personnel de l'utilisateur mime.types

  4. Ressource nommée META-INF/mime.types

  5. Ressource nommée META-INF/mimetypes.default (généralement trouvée uniquement dans le fichier activation.jar)

Cependant, si le Le fichier n'est pas trouvé, il renverra application/octet-stream en réponse.

Conclusion : jugement basé sur l'extension du fichier.

4. Utilisation de jmimemagicjMimeMagic

est une bibliothèque à licence restreinte que nous pouvons utiliser pour obtenir le type MIME d'un fichier.

Configuration des dépendances Maven :

<dependency>     <groupid>net.sf.jmimemagic</groupid>     <artifactid>jmimemagic</artifactid>     <version>0.1.5</version> </dependency>

Ensuite, nous explorerons comment utiliser cette bibliothèque :

public void test() {         File file = new File("d:/test.doc");         MagicMatch match = Magic.getMagicMatch(file, false);         System.out.println(match.getMimeType()); }

Cette bibliothèque peut gérer des flux de données et ne nécessite donc pas que les fichiers existent dans le système de fichiers.

Résultat :

Comment déterminer le type de fichier en 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); }

结果

Comment déterminer le type de fichier en Java

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer