java - Apache 提卡 : Parsing a text file omits last part?

标签 java apache apache-tika

我正在尝试使用 Tika 解析纯文本文件但变得不一致 行为。

更具体地说,我定义了一个简单的处理程序如下:

public class MyHandler extends DefaultHandler
{
     @Override
     public void characters(char ch[], int start, int length) throws SAXException
     {
        System.out.println(new String(ch));
     }
}

然后,我按如下方式解析文件(“myfile.txt”):

Tika tika = new Tika();
InputStream is = new FileInputStream("myfile.txt");

Metadata metadata = new Metadata();
ContentHandler handler = new MyHandler();

Parser parser = new TXTParser();
ParseContext context = new ParseContext();

String mimeType = tika.detect(is);
metadata.set(HttpHeaders.CONTENT_TYPE, mimeType);

tikaParser.parse(is, handler, metadata, context);

我希望文件中的所有文本都能在屏幕上打印出来,但是 小部分到底是不是。更具体地说,characters() 回调 每个回调持续读取 4,096 个字符,但最后显然 省略了这个特定文件的最后 5,083 个字符(这是几个 MB 长),所以它甚至超出了错过最后一个回调的范围。

此外,在另一个约 5,000 个字符长的小文件上进行测试, 似乎没有回调发生!

在这两种情况下,MIME 类型都被正确检测为 text/plain

有什么想法吗?

谢谢!

最佳答案

您使用的是什么版本的 Tika?查看源代码,它读取了 4096 字节的 block ,可以在 TXTParser129 行看到。 .在 132 行,调用了 characters(...) 例程。

简而言之,目标代码是:

   char[] buffer = new char[4096];
   int n = reader.read(buffer);
   while (n != -1) {
       xhtml.characters(buffer, 0, n);
       n = reader.read(buffer);
   }

其中 reader 是一个 BufferedReader。我看不出此代码有任何缺陷,因此我认为您可能使用的是旧版本?

关于java - Apache 提卡 : Parsing a text file omits last part?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6616719/

相关文章:

java - aspectJ 切入点如何与动态选择器一起使用?

php - 以 3 列显示动态表数据

linux - Docker 容器中运行多个 httpd 进程

apache - 尝试测试 TomEE 上部署的 Jersey REST Web 服务时出现 java.lang.IllegalAccessError

java - 如何在 Tika 中正确配置 AutoDetectParser?

用于replaceAll的Java正则表达式

java - 更改 CXF 中生成的类的包

Solr + DIH + Tika : indexing huge amount of files, 如何处理删除的文件?

java - JNA 的 W32API.* - 它们在哪里?

python - 使用 unpack 方法来自 tika python 模块的警告消息