微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

TikaException:解析PDF时无法关闭临时资源

如何解决TikaException:解析PDF时无法关闭临时资源

我在Windows 10 jre 1.8.0_241上使用Apache Tika,并且已经使用ant导入了Tika 1.24.1。我有以下代码从PDF中提取内容

public class TikaExtraction {
    
   public static void main(final String[] args) throws IOException,TikaException {

      //Assume sample.txt is in your current directory              
      File file = new File("C:\\Users\\myPC\\Desktop\\testPDF.pdf");
      
      //Instantiating Tika facade class
      Tika tika = new Tika();
      String filecontent = tika.parsetoString(file);
      System.out.println("Extracted Content: " + filecontent);
      
   }         
}

得到以下异常:

Exception in thread "main" 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.AutoDetectParser.parse(AutoDetectParser.java:150)
    at org.apache.tika.Tika.parsetoString(Tika.java:527)
    at com.oracle.cegbu.filesearch.service.kafka.TikaExtraction.main(TikaExtraction.java:28)
Caused by: java.nio.file.filesystemexception: C:\Users\myPC\AppData\Local\Temp\apache-tika-6518312717498705085.tmp: The process cannot access the file because it is being used by another process.

    at sun.nio.fs.WindowsException.translatetoIOException(UnkNown Source)
    at sun.nio.fs.WindowsException.rethrowAsIOException(UnkNown Source)
    at sun.nio.fs.WindowsException.rethrowAsIOException(UnkNown Source)
    at sun.nio.fs.WindowsFileSystemProvider.implDelete(UnkNown Source)
    at sun.nio.fs.AbstractFileSystemProvider.delete(UnkNown Source)
    at java.nio.file.Files.delete(UnkNown Source)
    at org.apache.tika.io.TemporaryResources$1.close(TemporaryResources.java:84)
    at org.apache.tika.io.TemporaryResources.close(TemporaryResources.java:145)
    at org.apache.tika.io.TemporaryResources.dispose(TemporaryResources.java:172)
    ... 3 more

解决方法

让我们尝试在资源尝试中使用inputStream而不是File

public class TikaExtraction {
public static void main(final String[] args) throws IOException,TikaException {

    //Assume sample.txt is in your current directory     
    Tika tika = new Tika();
    File file = new File("C:\\Users\\myPC\\Desktop\\testPDF.pdf");

    //Instantiating Tika facade class
    try(InputStream inputStream = new FileInputStream(file)) {
        String filecontent = tika.parseToString(inputStream);
        System.out.println("Extracted Content: " + filecontent);
    }
    
}

}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。