java - Apache Tika 和文件访问而不是 Java 输入流

标签 java file inputstream apache-tika

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

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

Allow passing of files or memory buffers to parsers

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

无效解析(InputStream 流、ContentHandler 处理程序、Metadata 元数据、ParseContext 上下文)

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

有没有人知道如何干净利落地处理这样的事情?

最佳答案

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

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

因此,我建议您将 InputStream 转换为 TikaInputStream(如果它已经是一个,则只是一个转换),然后获取文件并将其传递给您的 C++。

关于java - Apache Tika 和文件访问而不是 Java 输入流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6037419/

相关文章:

java - 如何在当前运行jar的同时运行exe文件

java - 如果没有构造函数,我怎样才能让这段代码发挥同样的作用?

java - 为什么我的代码创建了一个 .txt 文件,但没有在其中写入信息?

c# - 如何通过用户名监控文件服务器上的文件访问和更改?

java - 如何获取输入流的 crc 并返回其克隆是

java - 打开多个InputStream的优点和缺点?

java.lang.NoClassDefFoundError : android. support.v7.appcompat.R$styleable 错误

java - 定时器功能未运行。 java

Java:从utf-8文件中读取字节

java - 如何在java中指定getResourceAsStream()方法的路径