我在 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/