1.4 TIKA 相容JDK1.6 獲取流,元資料,內容
相容JDK1.6的最高版本的是 1.4版本的TIKA
1.4版本的TIKA,在讀取TXT內容時候存在一些問題,有更好的解決辦法,可以在下方留言。
以下為doc、docx、ppt、pptx、xls、xlsx,wps,ptf,rtf,htm。txtl格式
獲取流,元資料,內容方式(筆者親測過)
1)獲取BufferedReader 流
public BufferedReader getReader(File file) throws Exception
{
BufferedReader reader = null;
String extension = FilenameUtils.getExtension(file.getName());
if ("txt".equals(extension))
{
FileInputStream fis = new FileInputStream(file);
AutoDetectReader dr = new AutoDetectReader(fis);
reader = new BufferedReader(new InputStreamReader(
new FileInputStream(file), dr.getCharset()));
fis.close();
}
else
{
reader = new BufferedReader(new Tika().parse(file));
}
return reader;
}
2)獲取內容(txt內容讀取,用apache的common.io包實現)
public String getContent(File file) throws Exception
{
String content = null;
String extension = FilenameUtils.getExtension(file.getName());
if ("txt".equals(extension))
{
FileInputStream fis = null;
try
{
fis = new FileInputStream(file);
AutoDetectReader dr = new AutoDetectReader(fis);
content = FileUtils
.readFileToString(file, dr.getCharset());
}
catch (Exception e)
{
throw e;
}
finally
{
if (fis != null)
fis.close();
}
}
else
{
content = new Tika().parseToString(file);
}
return content;
}
3)獲取元資料
public Metadata getMetadata(File file) throws Exception
{
FileInputStream fis = new FileInputStream(file);
Metadata metadata = new Metadata();
Tika tika = new Tika();
tika.setMaxStringLength(0);
tika.parseToString(fis, metadata, 0);
return metadata;
}
資料的進一步封裝:
Map<String, String> metaMap = new HashMap<String, String>();
Metadata metadata = getMetadata();
for (String name : metadata.names())
{
metaMap.put(name, metadata.get(name));
}
效能方面還未進行詳細測試