【发布时间】:2013-03-18 00:32:25
【问题描述】:
我正在尝试创建一个简单的 java 程序,该程序从 zip 文件中的文件中读取和提取内容。 Zip 文件包含 3 个文件(txt、pdf、docx)。我需要阅读所有这些文件的内容,为此我使用 Apache Tika。
有人可以帮我实现这个功能吗?到目前为止我已经尝试过,但没有成功
代码片段
public class SampleZipExtract {
public static void main(String[] args) {
List<String> tempString = new ArrayList<String>();
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();
BodyContentHandler textHandler = new BodyContentHandler();
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(input, textHandler, metadata, new ParseContext());
tempString.add(textHandler.toString());
}
}
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) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (TikaException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
【问题讨论】:
-
为什么不将 zip 文件直接传递给 Apache Tika?然后它会调用你为 zip 中的每个文件提供的递归解析器,所以你不必做任何特别的事情!
-
这就是我想知道的,但无法获得足够的教程来说明如何做到这一点。我也有点担心 - javamex.com/tutorials/compression/zip_problems.shtml,不确定 Tika 是否解决了这个问题。
-
Tika 使用 commons compress 解决很多这些问题
-
61 Mb 用于 Tika? 61 Mb 仅用于使用 ZIP,可以使用约 10 个字符串完成?!我的应用程序有 15 个以上的活动,重量小于 4 Mb。我认为只有为琐碎的任务而拥有这么大的应用程序是对用户的不尊重。
标签: java zip extract apache-tika