TikaException:无法关闭临时资源 - 如何修复?

TikaException: Failed to close temporary resource - how to fix?

我在 Windows 10、jre 1.8 上使用 Apache Tika。0_181,并且我使用具有以下依赖项的 Maven 导入了 Tika:

<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.apache.tika</groupId>
      <artifactId>tika-parsers</artifactId>
      <version>1.21</version>
    </dependency>
</dependencies>

我有以下使用 Tesseract 执行 OCR 的代码(我已经独立测试并知道它可以工作):

public static void OCRTest() {
        try {
            BufferedImage im = ImageIO.read(new File(OCR_IMAGE));
            TesseractOCRConfig config = new TesseractOCRConfig();
            config.setTessdataPath("C:\Program Files\Tesseract-OCR\tessdata");
            config.setTesseractPath("C:\Program Files\Tesseract-OCR");
            ParseContext parseContext = new ParseContext();
            parseContext.set(TesseractOCRConfig.class, config);
            TesseractOCRParser parser = new TesseractOCRParser();
            BodyContentHandler handler = new BodyContentHandler();
            Metadata metadata = new Metadata();
            try {
                parser.parse(im, handler, metadata, parseContext);
                System.out.println(handler.toString());
            } catch (SAXException e) {
                e.printStackTrace();
            } catch (TikaException e) {
                e.printStackTrace();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

我运行进入以下异常:

org.apache.tika.exception.TikaException: Failed to close temporary resources
    at org.apache.tika.io.TemporaryResources.dispose(TemporaryResources.java:174)
    at org.apache.tika.parser.ocr.TesseractOCRParser.parse(TesseractOCRParser.java:251)
    at test.test.App.OCRTest(App.java:46)
    at test.test.App.main(App.java:30)
Caused by: java.nio.file.FileSystemException: C:\Users\m\AppData\Local\Temp\apache-tika-2643805894084124300.tmp: The process cannot access the file because it is being used by another process.

临时文件夹中存在tmp文件,异常似乎是无法删除。在 Apache Tika 论坛上,有一个 post 其他人 运行 进入相同的异常,尽管使用的是 AutoDetectParser 而不是 Tesseract。他们的问题似乎是他们导入的 jar 中的冲突,但我 运行 即使只安装了 Apache Tika 库也遇到了这个问题。

我在使用 Tika 的 AutoDetectParser 时没有 运行 这个问题,只有 TesseractOCRParser。任何有关如何修复异常的见解都将不胜感激!

我在 Apache Tika 问题论坛发帖 (https://issues.apache.org/jira/browse/TIKA-2908). The issue came from the order the TesseractOCRParser was closing the open streams - you can see the changes made here: https://github.com/apache/tika/commit/8d386f827eb31e7f1cb189ce942c67a84a0c6bdc?diff=unified#diff-592f390e7558bb6a1fe1c5bc810fe4c8

目前,对于遇到此问题的任何人,请在本地子类化 TesseractOCRParser 以包含上述更改,这些更改应在下一个快照版本中推送。

感谢 Tim @Apache Tika!