【发布时间】:2014-12-15 11:06:39
【问题描述】:
我将文件作为输入流传递给 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);
}
【问题讨论】:
-
看起来您缺少依赖项 - 堆栈跟踪在 Tika 解析期间显示错误,而不是在尝试移动期间显示错误。确保你的类路径中有包含该类的 jar。
-
如果能贴出源代码,帮助别人分析问题..
-
我已经添加了代码。请提出任何解决方案。
-
file.delete() 方法为同一文件返回 true,而 file.renameTo() 返回 false。可能是什么原因。但在某些情况下,文件已成功重命名。是文件系统的问题吗?
标签: java java-io file-rename apache-tika file-moving