Heim  >  Artikel  >  Java  >  So ermitteln Sie den Dateityp in Java

So ermitteln Sie den Dateityp in Java

WBOY
WBOYnach vorne
2023-04-22 13:46:072549Durchsuche

1. Bestimmen Sie anhand der Dateierweiterung

  • Vorteile: Schnelle Geschwindigkeit, einfacher Code

  • Nachteile: Der tatsächliche Dateityp kann nicht ermittelt werden, z. B. einige gefälschte Dateien oder Dateien ohne Suffixnamen

2. Bestimmen Sie anhand der ersten paar Zeichen im Dateistream

Vorteile: Kann den tatsächlichen Dateityp bestimmen

Nachteile: Langsame Geschwindigkeit, komplexer Code

Ich werde jede Methode unten besprechen , gehen Sie zum Testen und überprüfen Sie, die Testdatei lautet wie folgt:

  1. test.png: Erstellen Sie eine normale PNG-Datei mit dem Erweiterungsnamen test.png

  2. test.doc: Kopieren Sie die obige test.png-Datei und Ändern Sie es. Der Dateiname lautet test.doc

1. Beginnend mit Files.probeContentType

Java1.7 wird eine Methode zum Auflösen von MIME-Typen bereitgestellt. 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); }

Ergebnis:

So ermitteln Sie den Dateityp in Java

Diese Methode nutzt die installierte FileTypeDetector-Implementierung, um MIME-Typen zu erkennen. Es ruft den probeContentType jeder Implementierung auf, um den Typ aufzulösen.

Die Standardimplementierung ist jedoch betriebssystemspezifisch und kann je nach verwendetem Betriebssystem fehlschlagen.

Fazit: Beurteilung anhand der Dateierweiterung.

2. Verwendung von URLConnection

URLConnection bietet mehrere APIs zum Erkennen des MIME-Typs von Dateien.

2.1 Verwendung von getContentType

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

Ergebnis:

So ermitteln Sie den Dateityp in Java

Schlussfolgerung: Beurteilung anhand der ersten paar Zeichen im Dateistream. Der Hauptnachteil dieser Methode besteht jedoch darin, dass sie den tatsächlichen Dateityp ermitteln kann, da sie sehr langsam ist.

2.2 GuessContentTypeFromName verwenden

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

Ergebnis:

So ermitteln Sie den Dateityp in Java

Diese Methode verwendet die interne FileNameMap, um den MIME-Typ zu bestimmen.

Fazit: Der Dateierweiterung nach zu urteilen.

2.3 Verwendung von „gueContentTypeFromStream“

public static void test() throws Exception {     FileInputStream inputFile = new FileInputStream("d:/test.doc");     String mimeType = URLConnection.guessContentTypeFromStream(new BufferedInputStream(inputFile));     System.out.println(mimeType); }

Ergebnis:

So ermitteln Sie den Dateityp in Java

Schlussfolgerung: Beurteilung anhand der ersten paar Zeichen im Dateistream.

2.4 Verwendung von getFileNameMap

Eine schnellere Möglichkeit, den MIME-Typ mithilfe von URLConnection abzurufen, ist die Verwendung der getFileNameMap()-Methode:

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

Ergebnis:

So ermitteln Sie den Dateityp in Java

Diese Methode gibt eine Tabelle der verwendeten MIME-Typen zurück von allen Instanzen von URLConnection . Diese Tabelle wird dann zum Parsen der Eingabedateitypen verwendet.

Die integrierte Tabelle der MIME-Typen ist in Bezug auf URLConnection sehr begrenzt.

Standardmäßig verwendet diese Klasse die Datei content-types.properties und ihr Verzeichnis ist JRE_HOME/lib. Wir können es jedoch erweitern, indem wir mithilfe der Eigenschaft content.types.user.table eine benutzerspezifische Tabelle angeben:

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

Fazit: Gemessen an der Dateierweiterung.

3. Verwendung von MimeTypesFileTypeMap

Diese Klasse wird mit Java 6 geliefert und ist daher sehr praktisch, wenn JDK 1.6 verwendet wird.

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

Ergebnis:

So ermitteln Sie den Dateityp in Java

Hier können wir den Dateinamen oder die Dateiinstanz selbst als Parameter an die Funktion übergeben. Allerdings rufen Funktionen, die eine File-Instanz als Argument verwenden, intern eine überladene Methode auf, die einen Dateinamen als Argument akzeptiert.

Intern sucht diese Methode nach einer Datei namens mime.types zur Typauflösung. Es ist wichtig zu beachten, dass diese Methode in einer bestimmten Reihenfolge nach Dateien sucht:

  1. Hongmeng Official Strategic Cooperation and Co-construction – HarmonyOS Technology Community

  2. Fügen Sie der MimetypesFileTypeMap-Instanz

  3. programmgesteuert Einträge hinzu Home-Verzeichnis des Benutzers mime.types

  4. Ressource mit dem Namen META-INF/mime.types

  5. Ressource mit dem Namen META-INF/mimetypes.default (normalerweise nur in der Datei „activation.jar“ zu finden)

Wenn jedoch Wenn die Datei nicht gefunden wird, wird als Antwort application/octet-stream zurückgegeben.

Fazit: Beurteilung anhand der Dateierweiterung.

4. Verwendung von jmimemagicjMimeMagic

ist eine eingeschränkte Lizenzbibliothek, die wir verwenden können, um den MIME-Typ einer Datei abzurufen.

Maven-Abhängigkeiten konfigurieren:

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

Als nächstes werden wir untersuchen, wie diese Bibliothek verwendet wird:

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

Diese Bibliothek kann Datenströme verarbeiten und erfordert daher keine Dateien im Dateisystem.

Ergebnis:

So ermitteln Sie den Dateityp in 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); }

结果

So ermitteln Sie den Dateityp in Java

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

Das obige ist der detaillierte Inhalt vonSo ermitteln Sie den Dateityp in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen