有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用apache tika时无法使用java移动文件

我将一个文件作为输入流传递给解析器。方法,同时使用apache tika库将文件转换为文本。该方法抛出异常(如下所示),但输入流在finally块中成功关闭。然后,在重命名该文件时,该文件将被删除。从java重命名为方法。io返回false。尽管已成功关闭inputStream,但我无法重命名/移动文件。恐怕会创建文件的另一个实例,而不是解析器。parse()方法处理该文件,直到抛出异常时才会关闭该文件。可能吗?如果是,我应该如何重命名该文件

检查内容类型时引发的异常为

java.lang.NoClassDefFoundError: Could not initialize class com.adobe.xmp.impl.XMPMetaParser
at com.adobe.xmp.XMPMetaFactory.parseFromBuffer(XMPMetaFactory.java:160)
at com.adobe.xmp.XMPMetaFactory.parseFromBuffer(XMPMetaFactory.java:144)
at com.drew.metadata.xmp.XmpReader.extract(XmpReader.java:106)
at com.drew.imaging.jpeg.JpegMetadataReader.extractMetadataFromJpegSegmentReader(JpegMetadataReader.java:112)
at com.drew.imaging.jpeg.JpegMetadataReader.readMetadata(JpegMetadataReader.java:71)    
at org.apache.tika.parser.image.ImageMetadataExtractor.parseJpeg(ImageMetadataExtractor.java:91) 
at org.apache.tika.parser.jpeg.JpegParser.parse(JpegParser.java:56)
at org.apache.tika.parser.CompositeParser.parse(CompositeParser.java:244)
at org.apache.tika.parser.CompositeParser.parse(CompositeParser.java:244)
at org.apache.tika.parser.AutoDetectParser.parse(AutoDetectParser.java:121)

请提出解决方案。提前谢谢

public static void main(String args[]) { InputStream is = null; StringWriter writer = new StringWriter(); Metadata metadata = new Metadata(); Parser parser = new AutoDetectParser(); File file = null; File destination = null; try { file = new File("E:\\New folder\\testFile.pdf"); boolean a = file.exists(); destination = new File("E:\\New folder\\test\\testOutput.pdf"); is = new FileInputStream(file); parser.parse(is, new WriteOutContentHandler(writer), metadata, new ParseContext()); //EXCEPTION IS THROWN HERE. String contentType = metadata.get(Metadata.CONTENT_TYPE); System.out.println(contentType); } catch(Exception e1) { e1.printStackTrace(); } catch(Throwable t) { t.printStackTrace(); } finally { try { if(is!=null) { is.close(); //CLOSES THE INPUT STREAM } writer.close(); } catch(Exception e2) { e2.printStackTrace(); } } boolean x = file.renameTo(destination); //RETURNS FALSE System.out.println(x); }

共 (1) 个答案

  1. # 1 楼答案

    这可能是由于其他进程仍在使用该文件,如防病毒程序,也可能是应用程序中的任何其他进程都可能拥有锁。 请检查并处理,这可能会解决你的问题