Ho voluto giusto fare una prova con Tika. Ho messo come dipendenze (Maven) queste:
<dependency>
<groupId>org.apache.tika</groupId>
<artifactId>tika-core</artifactId>
<version>1.24.1</version>
</dependency>
<dependency>
<groupId>org.apache.tika</groupId>
<artifactId>tika-parsers</artifactId>
<version>1.24.1</version>
</dependency>
Da quanto ho letto, non basta il tika-core, perché nel tika-parsers ci sono ulteriori detector utili per il riconoscimento dei file.
Nota: tika-parsers tira anche dentro SLF4J per il logging ma non ho configurato un binding (non ha importanza per la prova fatta).
Poi ho scritto questo di prova al volo:
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import org.apache.tika.config.TikaConfig;
import org.apache.tika.detect.Detector;
import org.apache.tika.exception.TikaException;
import org.apache.tika.io.TikaInputStream;
import org.apache.tika.metadata.Metadata;
import org.apache.tika.mime.MediaType;
public class ProvaTika {
public static void main(String[] args) throws Exception {
System.out.println(detectMediaType(Paths.get("blablabla\\file_docx_prova")));
System.out.println(detectMediaType(Paths.get("blablabla\\file_xlsx_prova")));
}
private static MediaType detectMediaType(Path p) throws TikaException, IOException {
TikaConfig tika = new TikaConfig();
Metadata metadata = new Metadata();
Detector detector = tika.getDetector();
MediaType mediaType = detector.detect(TikaInputStream.get(p), metadata);
return mediaType;
}
}
Ed ottengo in output:
application/vnd.openxmlformats-officedocument.wordprocessingml.document
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
Quindi effettivamente tika è in grado di distinguere i due documenti. Nota: per la prova ho usato dei documenti docx/xlsx fatti da dei miei colleghi che hanno l'Office Microsoft.