这是我的代码:
// getFile() method returns the input stream of a local or online file
InputStream fileStream = getFile(source);
// Convert an InputStream to an InputSource
org.xml.sax.InputSource fileSource = new org.xml.sax.InputSource(fileStream);
// Extract text via the Boilerpipe DefaultExtractor
String text = DefaultExtractor.INSTANCE.getText(fileSource);
// Extract text and metadata via Apache Tika
BodyContentHandler handler = new BodyContentHandler();
Metadata metadata = new Metadata();
ParseContext context = new ParseContext();
AutoDetectParser parser = new AutoDetectParser();
parser.parse(fileStream, handler, metadata, context);
我不明白为什么只有第一个提取器起作用。
在这种情况下,只有 Boilerpipe (第一个提取器)可以工作,而 Apache Tika (第二个提取器)无法提取任何内容。
我尝试创建 fileStream
的副本(通过 InputStream fileStream2 = fileStream;
)并将 fileStream
传递给一个读取器和 fileStream2
给另一个读者,但它也不起作用。
我还尝试将从 fileStream
中提取的 HTML 传递给 Boilerpipe,并将 fileStream
传递给 Tika,但结果是相同的。
我怀疑问题在于同一个InputStream
无法读取两次。
您能帮我看看如何将 1 个 InputStream
的内容传递给 2 个读取器吗?
编辑: 我找到了解决方案并将其发布在下面
最佳答案
如果您有一个 Maven 项目,则必须包含这些依赖项(在 pom.xml
中),以便 boilerpipe
可以工作:
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
<version>x.y.z</version>
</dependency>
<dependency>
<groupId>net.sourceforge.nekohtml</groupId>
<artifactId>nekohtml</artifactId>
<version>x.y.z</version>
</dependency>
关于java - 无法读取同一个InputStream两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47559941/