Um meine 5 Cents beizusteuern:
TL,DR
Ich benutze MimetypesFileTypeMap und fügen Sie alle Mime-Dateien, die dort nicht vorhanden sind und die ich speziell benötige, in die Datei mime.types ein.
Und jetzt, die lange Lektüre:
Zunächst einmal ist die Liste der MIME-Typen riesig , siehe hier: https://www.iana.org/assignments/media-types/media-types.xhtml
Ich verwende gerne zuerst die Standardfunktionen des JDK, und wenn das nicht funktioniert, suche ich nach etwas anderem.
Bestimmung des Dateityps anhand der Dateierweiterung
Seit 1.6 hat Java MimetypesFileTypeMap, wie in einer der Antworten oben erwähnt, und es ist der einfachste Weg, um Mime-Typ zu bestimmen:
new MimetypesFileTypeMap().getContentType( fileName );
In seiner Vanilla-Implementierung bringt dies nicht viel (d.h. es funktioniert für .html, aber nicht für .png). Es ist jedoch super einfach, jeden Inhaltstyp hinzuzufügen, den Sie benötigen:
- Erstellen Sie eine Datei namens 'mime.types' im META-INF-Ordner in Ihrem Projekt
- Fügen Sie eine Zeile für jeden Mime-Typ hinzu, den Sie benötigen und der in der Standardimplementierung nicht enthalten ist (es gibt Hunderte von Mime-Typen und die Liste wächst mit der Zeit).
Beispieleinträge für png- und js-Dateien wären:
image/png png PNG
application/javascript js
Weitere Informationen zum Dateiformat mime.types finden Sie hier: https://docs.oracle.com/javase/7/docs/api/javax/activation/MimetypesFileTypeMap.html
Bestimmung des Dateityps anhand des Dateiinhalts
Seit 1.7 hat Java java.nio.file.spi.FileTypeDetector die eine Standard-API für die Bestimmung eines Dateityps in Implementierungsspezifische Art und Weise .
Um den Mime-Typ einer Datei abzurufen, verwenden Sie einfach Dateien und tun Sie dies in Ihrem Code:
Files.probeContentType(Paths.get("either file name or full path goes here"));
Die API-Definition sieht Einrichtungen vor, die entweder die Bestimmung des Mime-Typs einer Datei aus dem Dateinamen oder aus dem Dateiinhalt (magische Bytes) unterstützen. Aus diesem Grund probeContentType() Methode löst eine IOException aus, wenn eine Implementierung dieser API den ihr zur Verfügung gestellten Pfad verwendet, um zu versuchen, die damit verbundene Datei zu öffnen.
Nochmals, Vanille Umsetzung (die mit dem JDK mitgelieferte) lässt viel zu wünschen übrig.
In einer idealen Welt in einer weit, weit entfernten Galaxie würden all diese Bibliotheken, die versuchen, dieses File-to-Mime-Problem zu lösen, einfach Folgendes implementieren java.nio.file.spi.FileTypeDetector Sie würden die Jar-Datei der bevorzugten implementierenden Bibliothek in Ihren Klassenpfad einfügen und das war's.
In der realen Welt, in der Sie den TL,DR-Abschnitt brauchen, sollten Sie die Bibliothek mit den meisten Sternen neben ihrem Namen finden und sie benutzen. In diesem speziellen Fall brauche ich (noch ;) ) keine.