我正在尝试使用 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。
有任何想法吗?
谢谢!