6

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

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

允许将文件或内存缓冲区传递给解析器

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

void parse(InputStream 流、ContentHandler 处理程序、元数据元数据、ParseContext 上下文)

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

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

4

2 回答 2

6

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

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

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

于 2011-05-17T22:36:48.647 回答
1

如果我理解正确并假设您正在使用 启动 C++ 程序,您可以将s 标准输出流Runtime.exec解析为Tika 想要的。那行得通吗?ProcessInputStream

于 2011-05-17T21:46:02.140 回答