java - 蒂卡异常 : Failed to close temporary resource - how to fix?

标签 java apache maven tesseract apache-tika

我在 Windows 10、jre 1.8.0_181 上使用 Apache Tika,并且我已使用具有以下依赖项的 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 ) 上发帖。该问题来自 TesseractOCRParser 关闭打开流的顺序 - 您可以在此处看到所做的更改:https://github.com/apache/tika/commit/8d386f827eb31e7f1cb189ce942c67a84a0c6bdc?diff=unified#diff-592f390e7558bb6a1fe1c5bc810fe4c8

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

感谢蒂姆@Apache Tika!

关于java - 蒂卡异常 : Failed to close temporary resource - how to fix?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57064003/

相关文章:

java - Morphia:为每个数据库创建新的 Morphia 实例?

java - 我正在尝试在 java 中运行 groovy 脚本

java - 关于在 Java 中使用 JDBC 连接到 IBM 数据库

java - 使用 HTTP Apache 从 AJP 连接器后面的 Tomcat 传出连接

apache - 运行 Tomcat 没有响应 : does not start, 什么都不做

java - 无法找到/解决 Artifact : Maven error

java - 将数组写入文件时删除最后一行和空格

java - FileUtils.write写入速度

Maven:如何通过设置使用 settings.xml 中的属性。字首?

java - 没有名为 "EntityManager"Java 的 "firstOne"的持久性提供程序