Heim Java javaLernprogramm So ermitteln Sie den Dateityp in Java

So ermitteln Sie den Dateityp in Java

Apr 22, 2023 pm 01:46 PM
java

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); }
Nach dem Login kopieren

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(); }
Nach dem Login kopieren

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()); }
Nach dem Login kopieren

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); }
Nach dem Login kopieren

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()); }
Nach dem Login kopieren

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>
Nach dem Login kopieren

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()); }
Nach dem Login kopieren

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>
Nach dem Login kopieren

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()); }
Nach dem Login kopieren

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>
Nach dem Login kopieren

接下来,我们将使用detect()方法来解析类型:

public void whenUsingTika_thenSuccess() {     File file = new File("d:/test.doc");     Tika tika = new Tika();     String mimeType = tika.detect(file); }
Nach dem Login kopieren

结果

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Perfekte Zahl in Java Perfekte Zahl in Java Aug 30, 2024 pm 04:28 PM

Leitfaden zur perfekten Zahl in Java. Hier besprechen wir die Definition, Wie prüft man die perfekte Zahl in Java?, Beispiele mit Code-Implementierung.

Zufallszahlengenerator in Java Zufallszahlengenerator in Java Aug 30, 2024 pm 04:27 PM

Leitfaden zum Zufallszahlengenerator in Java. Hier besprechen wir Funktionen in Java anhand von Beispielen und zwei verschiedene Generatoren anhand ihrer Beispiele.

Weka in Java Weka in Java Aug 30, 2024 pm 04:28 PM

Leitfaden für Weka in Java. Hier besprechen wir die Einführung, die Verwendung von Weka Java, die Art der Plattform und die Vorteile anhand von Beispielen.

Smith-Nummer in Java Smith-Nummer in Java Aug 30, 2024 pm 04:28 PM

Leitfaden zur Smith-Zahl in Java. Hier besprechen wir die Definition: Wie überprüft man die Smith-Nummer in Java? Beispiel mit Code-Implementierung.

Fragen zum Java Spring-Interview Fragen zum Java Spring-Interview Aug 30, 2024 pm 04:29 PM

In diesem Artikel haben wir die am häufigsten gestellten Fragen zu Java Spring-Interviews mit ihren detaillierten Antworten zusammengestellt. Damit Sie das Interview knacken können.

Brechen oder aus Java 8 Stream foreach zurückkehren? Brechen oder aus Java 8 Stream foreach zurückkehren? Feb 07, 2025 pm 12:09 PM

Java 8 führt die Stream -API ein und bietet eine leistungsstarke und ausdrucksstarke Möglichkeit, Datensammlungen zu verarbeiten. Eine häufige Frage bei der Verwendung von Stream lautet jedoch: Wie kann man von einem Foreach -Betrieb brechen oder zurückkehren? Herkömmliche Schleifen ermöglichen eine frühzeitige Unterbrechung oder Rückkehr, aber die Stream's foreach -Methode unterstützt diese Methode nicht direkt. In diesem Artikel werden die Gründe erläutert und alternative Methoden zur Implementierung vorzeitiger Beendigung in Strahlverarbeitungssystemen erforscht. Weitere Lektüre: Java Stream API -Verbesserungen Stream foreach verstehen Die Foreach -Methode ist ein Terminalbetrieb, der einen Vorgang für jedes Element im Stream ausführt. Seine Designabsicht ist

Zeitstempel für Datum in Java Zeitstempel für Datum in Java Aug 30, 2024 pm 04:28 PM

Anleitung zum TimeStamp to Date in Java. Hier diskutieren wir auch die Einführung und wie man Zeitstempel in Java in ein Datum konvertiert, zusammen mit Beispielen.

Gestalten Sie die Zukunft: Java-Programmierung für absolute Anfänger Gestalten Sie die Zukunft: Java-Programmierung für absolute Anfänger Oct 13, 2024 pm 01:32 PM

Java ist eine beliebte Programmiersprache, die sowohl von Anfängern als auch von erfahrenen Entwicklern erlernt werden kann. Dieses Tutorial beginnt mit grundlegenden Konzepten und geht dann weiter zu fortgeschrittenen Themen. Nach der Installation des Java Development Kit können Sie das Programmieren üben, indem Sie ein einfaches „Hello, World!“-Programm erstellen. Nachdem Sie den Code verstanden haben, verwenden Sie die Eingabeaufforderung, um das Programm zu kompilieren und auszuführen. Auf der Konsole wird „Hello, World!“ ausgegeben. Mit dem Erlernen von Java beginnt Ihre Programmierreise, und wenn Sie Ihre Kenntnisse vertiefen, können Sie komplexere Anwendungen erstellen.

See all articles