Here is an example of how to do it with Apache Tika 2.6.0 (current version at this moment)
// Read a CSV file.
File file = new File("src/test/resources/testcsv/entities.csv");
String csvContent = Files.readString(file.toPath());
InputStream is = new FileInputStream(file);
BufferedInputStream bufferedInputStream = new BufferedInputStream(is);
// Prepare Tika data for detection
Metadata metadata = new Metadata();
metadata.set(TikaCoreProperties.RESOURCE_NAME_KEY, file.getFilename());
String detectedMimeType = MimeTypes.getDefaultMimeTypes().detect(bufferedInputStream, metadata).toString();
assertEquals("text/csv", detectedMimeType);
For a no real CSV file but trying to fake the extension:
// Read a file that is not a CSV. I've downloaded https://upload.wikimedia.org/wikipedia/commons/7/74/Apache_Tika_Logo.svg and renamed to '.csv' extension for the test
File file = new File("src/test/resources/testcsv/Apache_Tika_Logo.csv");
String csvContent = Files.readString(file.toPath());
InputStream is = new FileInputStream(file);
BufferedInputStream bufferedInputStream = new BufferedInputStream(is);
// Prepare Tika data for detection
Metadata metadata = new Metadata();
metadata.set(TikaCoreProperties.RESOURCE_NAME_KEY, file.getFilename());
String detectedMimeType = MimeTypes.getDefaultMimeTypes().detect(bufferedInputStream, metadata).toString();
assertNotEquals("text/csv", detectedMimeType);
The output of the detectedMimeType
variable in the example file is image/svg+xml