Java Tika无法删除临时文件

Java Tika无法删除临时文件,java,io,garbage-collection,apache-tika,memory-mapping,Java,Io,Garbage Collection,Apache Tika,Memory Mapping,在我们的应用程序中,我们使用ApacheTika处理文件。但Tika无法处理某些文件(例如*.mov、*.mp4),并将相应的*.tmp文件保留在用户的临时文件夹中。经过一些研究,我发现这是一个已知的bug: 在最后一条评论中,一位用户谈到了一个变通方法,但它不适用于我: final Tika tika = new Tika(); final TikaInputStream fileStream = TikaInputStream.get(/*some InputStream*/); try {

在我们的应用程序中,我们使用ApacheTika处理文件。但Tika无法处理某些文件(例如*.mov、*.mp4),并将相应的*.tmp文件保留在用户的临时文件夹中。经过一些研究,我发现这是一个已知的bug:

在最后一条评论中,一位用户谈到了一个变通方法,但它不适用于我:

final Tika tika = new Tika();
final TikaInputStream fileStream = TikaInputStream.get(/*some InputStream*/);
try {
    final String extractedString = tika.parseToString(fileStream);
    //do something with the string
} finally {
    CloseUtils.close(fileStream);
}
使用上面的代码仍然会在temp文件夹中保留temp文件。解决这个问题的方法是什么?

应该使用文件对象而不是InputStream调用get()方法:

final File file = new File("c:/some_file.mov");
final TikaInputStream fileStream = TikaInputStream.get(file);

Tika仍然无法处理它,但它实际上成功地删除了相应的TIG tmp文件。

另一个解决方法是禁用
org.apache.Tika.parser.mp4.MP4Parser
。这里有两种解决方案:


如果您在Linux/Unix上,您可以让cronjob清理临时文件。不幸的是,我在Windows上,我还必须从Java解决这个问题。