Apache Tika
Apache Tika, belirli dosya tip ve formatlarından dosyaların türünü anlama ve içeriğini çıkarmaya çalışan bir Apache projesidir. Tika 2007 yılında Apache Lucene’in alt projesi olarak geliştirilmeye başlanmıştır. Tika’yı kullanarak bir çok farklı veri tipine ait işlemler yapılabilmektedir.Tika, dosya sistemi veya anabellekte bulunan verilerin veri tiplerini elde etmeye yararken, aynı zamanda bu veri ve dosya tiplerine dair çeşitli metadata verileri de sunabilmektedir.
Tika’yı projemizde kullanmak için uygun maven dependency i projemize eklememiz gerekiyor. Bu yazıda Java 7 ile örnek yaptığımız için Tika’nın Java 7 ile uyumlu olan dependency bilgilerini aşağıda yazıyorum.

Tika’yı projemize ekledikten sonra Tika’yı projemizde farklı yöntemlerle kullanabilme metodlarına bakalım :
DiskFileItem Kullanarak dosya tipini bulmak için Tika inputstream metoduna File Item nesnemizi gönderip Inputstream kullnılarak dosyamızın tipini tespit edebiliriz. Tika detect metodu ile stream ve metadata kullanılarak dosyamızın hem tipini hem de uzantısını tespit etmiş oluyoruz.
public String findFileExtension(FileItem file) {
TikaConfig config= new TikaConfig();
Detector detector = config.getDetector();
Metadata metadata = new Metadata();
metadata.add(Metadata.RESOURCE_NAME_KEY, file.getName());
InputStream stream = TikaInputStream.get(file.getInputStream());
MediaType mediaType = detector.detect(stream, metadata);
MimeType mimeType = config.getMimeRepository().forName(mediaType.toString());
String suffix = mimeType.getExtension();
return suffix;
}
Benzer bir metodu Fileitem yerine File göndererek de aşağıdaki gibi yazabiliriz:
public String findFileExtension(String file) {
TikaConfig config= new TikaConfig();
Detector detector = config.getDetector();
Metadata metadata = new Metadata();
metadata.add(Metadata.RESOURCE_NAME_KEY, file.getName());
InputStream stream = TikaInputStream.get(new File(file), metadata);
MediaType mediaType = detector.detect(stream, metadata);
MimeType mimeType = config.getMimeRepository().forName(mediaType.toString());
String suffix = mimeType.getExtension();
return suffix;
}
Bu iki yöntem dosya tipini ve uzantısını tespit etmek için yeterli olacaktır. Dosya ile ilgili bilgileri ise parser metodu yardımıyla metadata dan alabiliriz.
public void findMetadata(){
Metadata metadata = new Metadata();
ContentHandler handler = new DefaultHandler();
Parser parser = new PDFParser();
ParseContext context = new ParseContext();
parser.parse(new FileInputStream("C:\\Users\\erman.ag\\Desktop\\test.pdf"),
handler,
metadata,
context);
String[] names = metadata.names();
for (String name : names)
System.out.printf("%s : %s %n", name, metadata.get(name));
}

Tika ile ilgii bu üç metodun bulunduğu github reposuna aşağıdan erişebilirsiniz: