diff --git a/core-java-modules/core-java-io/pom.xml b/core-java-modules/core-java-io/pom.xml
index faeddafd81..caf9fca756 100644
--- a/core-java-modules/core-java-io/pom.xml
+++ b/core-java-modules/core-java-io/pom.xml
@@ -43,6 +43,17 @@
${angus-activation.version}
test
+
+ org.jodd
+ jodd-util
+ 6.2.1
+
+
+ com.j256.simplemagic
+ simplemagic
+ 1.17
+
+
diff --git a/core-java-modules/core-java-io/src/test/java/com/baeldung/extension/ExtensionFromMimeTypeUnitTest.java b/core-java-modules/core-java-io/src/test/java/com/baeldung/extension/ExtensionFromMimeTypeUnitTest.java
new file mode 100644
index 0000000000..f8f42861cc
--- /dev/null
+++ b/core-java-modules/core-java-io/src/test/java/com/baeldung/extension/ExtensionFromMimeTypeUnitTest.java
@@ -0,0 +1,62 @@
+package com.baeldung.extension;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.Assert.assertEquals;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.tika.mime.MimeTypeException;
+
+import org.junit.Test;
+
+import com.j256.simplemagic.ContentInfo;
+
+public class ExtensionFromMimeTypeUnitTest {
+ private static final String IMAGE_JPEG_MIME_TYPE = "image/jpeg";
+ @Test
+ public void whenUsingTika_thenGetFileExtension() throws MimeTypeException {
+ List expectedExtensions = Arrays.asList(".jpg", ".jpeg", ".jpe", ".jif", ".jfif", ".jfi");
+ org.apache.tika.mime.MimeTypes allTypes = org.apache.tika.mime.MimeTypes.getDefaultMimeTypes();
+ org.apache.tika.mime.MimeType type = allTypes.forName(IMAGE_JPEG_MIME_TYPE);
+ String primaryExtension = type.getExtension();
+ assertEquals(".jpg", primaryExtension);
+ List detectedExtensions = type.getExtensions();
+ assertThat(detectedExtensions).containsExactlyElementsOf(expectedExtensions);
+ }
+
+ @Test
+ public void whenUsingJodd_thenGetFileExtension() {
+ List expectedExtensions = Arrays.asList("jpeg", "jpg", "jpe");
+ String[] detectedExtensions = jodd.net.MimeTypes.findExtensionsByMimeTypes(IMAGE_JPEG_MIME_TYPE, false);
+ assertThat(detectedExtensions).containsExactlyElementsOf(expectedExtensions);
+ }
+
+ @Test
+ public void whenUsingMimetypesFileTypeMap_thenGetFileExtension() {
+ List expectedExtensions = Arrays.asList("jpeg", "jpg", "jpe");
+ ContentInfo contentInfo = new ContentInfo("", IMAGE_JPEG_MIME_TYPE, "", true);
+ String[] detectedExtensions = contentInfo.getFileExtensions();
+ assertThat(detectedExtensions).containsExactlyElementsOf(expectedExtensions);
+ }
+
+ @Test
+ public void whenUsingCustomLogic_thenGetFileExtension() {
+ Map> mimeExtensionsMap = new HashMap<>();
+ List expectedExtensions = Arrays.asList(".jpg", ".jpe", ".jpeg");
+ addMimeExtensions(mimeExtensionsMap, "image/jpeg", ".jpg");
+ addMimeExtensions(mimeExtensionsMap, "image/jpeg", ".jpe");
+ addMimeExtensions(mimeExtensionsMap, "image/jpeg", ".jpeg");
+
+ Set detectedExtensions = mimeExtensionsMap.get(IMAGE_JPEG_MIME_TYPE);
+ assertThat(detectedExtensions).containsExactlyElementsOf(expectedExtensions);
+ }
+
+ private void addMimeExtensions(Map> map, String mimeType, String extension) {
+ map.computeIfAbsent(mimeType, k -> new HashSet<>()).add(extension);
+ }
+}