前言
有這樣一個需求“用戶上傳一個文件鄙麦,要得到這個文件的文本內容,和它的創(chuàng)建時間(用戶創(chuàng)建的時間)”
乍一看上去弥雹,很簡單啊缺猛,可以按字節(jié)讀文件或按行讀文件缨叫,也可以根據(jù)文件的類型引入對應的jar包去獲取內容。文件的創(chuàng)建時間荔燎,我找了一些資料耻姥,可以通過下面代碼實現(xiàn):
Process p = Runtime.getRuntime().exec("cmd /C dir "
+ filePath
+ "/tc" );
InputStream is = p.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line;
while((line = br.readLine()) != null){
if(line.endsWith(".txt")){
strTime = line.substring(0,17);
break;
}
}
到了這里,我正打算去實現(xiàn)湖雹,轉念一想咏闪,apache的工具包里有提供文件復制的功能,即IOUtils.copy(InputStream input, OutputStream output)
摔吏,那同樣的Apache是否擁有提取文件內容和時間的工具類呢鸽嫂,還真有!這就是接下來要說的Apache Tika
Tika
The Apache Tika? toolkit detects and extracts metadata and text from over a thousand different file types (such as PPT, XLS, and PDF). All of these file types can be parsed through a single interface, making Tika useful for search engine indexing, content analysis, translation, and much more. You can find the latest release on the download page. Please see the Getting Started page for more information on how to start using Tika.
官方介紹說它可以支持上千種文件類型征讲,同時支持搜索引擎索引据某、內容分析、翻譯诗箍。癣籽。÷俗妫看到這筷狼,感覺我又發(fā)現(xiàn)了新大陸!=惩埂材!
下面這張圖是tika的主要結構圖:
tika會根據(jù)你輸入的文件自動分配解析工具,如PDFParser
汤求、OOXMLParser
和HtmlParser
等等俏险,然后解析語言严拒、MIME type、文本內容和Metedata
我這里使用到Tika兩個功能:
- 文本內容抽取
- 元數(shù)據(jù)(MetaData)的獲取
補充:MetaData即描述數(shù)據(jù)的數(shù)據(jù)竖独!如一個文件的創(chuàng)建者裤唠,創(chuàng)建時間,文檔類型莹痢,字節(jié)數(shù)等等种蘸。維基百科
這里是一個簡單教程,能讓你快速了解并使用其功能http://www.yiibai.com/tika/
使用
Tika是一個開源的項目格二,代碼在這https://github.com/apache/tika劈彪,他提供了多個服務竣蹦,有圖形界面的也有Http服務
GUI
將項目checkout到本地并執(zhí)行mvn clean install
顶猜,然后進入tika-app目錄,執(zhí)行
java -jar tika-app-1.4.jar --gui
如下動圖
Server
關于官方指定使用curl
痘括,我就在ubuntu上啟動了server长窄,啟動的方式為
java -jar tika-server/target/tika-server.jar
測試了一個文件,如下圖
還有其他的方法纲菌,如:
Extract plain text:
curl -T price.xls http://localhost:9998/tika
Extract text with mime-type hint:
curl -v -H "Content-type: application/vnd.openxmlformats-officedocument.wordprocessingml.document" -T document.docx http://localhost:9998/tika
Get all document attachments as ZIP-file:
curl -v -T Doc1_ole.doc http://localhost:9998/unpacker > /var/tmp/x.zip
Extract metadata to CSV format:
curl -T price.xls http://localhost:9998/meta
Detect media type from CSV format using file extension hint:
curl -X PUT -H "Content-Disposition: attachment; filename=foo.csv" --upload-file foo.csv http://localhost:9998/detect/stream
可根據(jù)自己的需要去調用
整合本地服務
雖然tika自己提供了服務挠日,但是有的時候,我們想在本地自己搭建一個服務翰舌,在抽取完內容后或許還要做些其他的工作嚣潜。就這個目的,我將1.14版本的tika整合到了本地椅贱,并自己搭建了一個簡單的服務懂算,接口如下
依然使用swagger整理接口,如果你對swagger不了解庇麦,可以點這里,代碼放在了github计技,歡迎查看
歡迎瀏覽我的個人博客