使用Apache Tika 從Zip 存檔中的文件中提取內容
問題:
開發一個Java 程序,利用Apache Tika 讀取儲存在zip 檔案中的檔案內容。 zip 檔案包含各種檔案格式(例如 txt、pdf 和 docx)。
解決方案:
要實現所需的功能,請依照下列步驟操作:
解析Zip 檔案:
呼叫Apache Tika:
提取並轉換內容:
合併提取的內容:
程式碼片段(已修改):
<code class="java">import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import org.apache.tika.exception.TikaException; import org.apache.tika.metadata.Metadata; import org.apache.tika.parser.AutoDetectParser; import org.apache.tika.parser.BodyContentHandler; import org.apache.tika.parser.ParseContext; import org.apache.tika.parser.Parser; import org.apache.tika.sax.BodyContentHandlerFactory; import org.xml.sax.SAXException; public class ImprovedZipExtractor { public static void main(String[] args) { List<String> tempString = new ArrayList<>(); StringBuffer sbf = new StringBuffer(); File file = new File("C:\Users\xxx\Desktop\abc.zip"); InputStream input; try { input = new FileInputStream(file); ZipInputStream zip = new ZipInputStream(input); ZipEntry entry = zip.getNextEntry(); Metadata metadata = new Metadata(); Parser parser = new AutoDetectParser(); while (entry != null) { if (entry.getName().endsWith(".txt") || entry.getName().endsWith(".pdf") || entry.getName().endsWith(".docx")) { System.out.println("entry=" + entry.getName() + " " + entry.getSize()); parser.parse(zip, new BodyContentHandlerFactory(BodyContentHandlerFactory.INCLUDE_ENTITY_ROOT, false).getNewBodyContentHandler(), metadata, new ParseContext()); tempString.add(sbf.toString()); } entry = zip.getNextEntry(); } zip.close(); input.close(); for (String text : tempString) { System.out.println("Apache Tika - Converted input string : " + text); sbf.append(text); System.out.println("Final text from all the three files " + sbf.toString()); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (SAXException e) { e.printStackTrace(); } catch (TikaException e) { e.printStackTrace(); } } }</code>
注意:修改程式碼以防止每一種程式修改程式碼以防止每次迭代期間sbf 被覆蓋並在循環外清除它以儲存連接的內容非常重要所有檔案的內容。
以上是如何使用 Java 中的 Apache Tika 從 zip 檔案中的檔案中提取內容?的詳細內容。更多資訊請關注PHP中文網其他相關文章!