Apache Tika和File访问而不是Java Input Stream

时间:2011-05-17 21:32:09

标签: java file inputstream apache-tika

我希望能够创建一个新的Tika解析器来从文件中提取元数据。我们已经在使用Tika,元数据提取将始终如一。

我认为我遇到了Tika的这个问题/增强请求:

Allow passing of files or memory buffers to parsers

我有一个控制台c ++可执行文件,它接受输入文件的路径,然后输出它找到的元数据,每行包含名称/值对。
c ++代码依赖于在访问数据时期望文件路径的库。 用Java重写这个可执行文件是不可能的。 我认为把它插入Tika是相当容易的。但是Tika解析器需要使用Java,并且需要重写的Tika解析器方法需要一个开放的输入流:

void parse(InputStream stream,ContentHandler handler,Metadata metadata,ParseContext context)

所以我想我唯一的解决方案是获取输入流并将其写入临时文件,然后处理写入的文件,然后最终清理文件。我讨厌搞乱一个临时文件,然后可能不得不担心临时文件的清理,如果出现问题并且不会被删除。

有没有人对如何干净地处理这样的事情有一个聪明的想法?

2 个答案:

答案 0 :(得分:5)

TikaInputStream应该有所帮助。它处理包装File或InputStream,并在解析器需要时在内部进行转换。它会根据您的需要执行所有临时文件位。

多个Java解析器已经使用它,因为它们需要文件而不是输入流。更重要的是,拥有文件的用户可以将其传递给包含为InputStream的Parser,并且解析器可以根据需要将其读取为File或InputStream。

所以,我建议你只需将InputStream转换为TikaInputStream(如果它已经是一个,它只是一个演员),然后获取文件并将其传递给你的c ++。

答案 1 :(得分:1)

如果我理解正确并假设您使用Runtime.exec启动C ++程序,则可以将Process标准输出流解析为Tika想要的InputStream。那会有用吗?