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



我将一个文件作为输入流传递给parser.parse()方法,同时使用apache tika库将文件转换为文本。该方法抛出一个异常(如下所示),但输入流在finally块中成功关闭。然后,在重命名文件时,java.io中的file.renameTo方法返回false。尽管成功关闭了inputStream,但我无法重命名/移动文件。恐怕文件的另一个实例已经创建,而parser.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);
	}

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

相关内容

  • 没有找到相关文章

最新更新