如何用Java判断文件是否损坏(可读)?

7
我有一个Web应用程序,用户可以通过FTP上传任何PDF。在PDF文件上传后,我对该PDF执行某些操作。
但问题在于,当通过FTP上传PDF时,有时候连接会中断,并且上传的PDF不完整(表现为损坏的文件)。当我尝试在Acrobat Reader中打开该文档时,它会显示“出现错误,无法打开文档。文件已损坏,无法修复”的消息。
因此,在开始处理PDF之前,我想检查所上传的PDF是否可读,也就是没有损坏。
Java是否提供任何API来实现这一点,或者是否有任何方法来检查文件是否已损坏?

9
使用MD5SUM生成本地哈希值,在上传后生成远程哈希值并比较它们。 - Marek Sebera
1个回答

10
我们可以使用Java中的iText API来处理PDF文件。
要检查PDF文件是否可加载和读取,请使用com.itextpdf.text.pdf.PdfReader。 如果该文件已损坏,则会引发像com.itextpdf.text.exceptions.InvalidPdfException这样的异常。 示例代码片段:
...  
import com.itextpdf.text.pdf.PdfReader;  
...  
try {  
    PdfReader pdfReader = new PdfReader( pathToUploadedPdfFile );  

    String textFromPdfFilePageOne = PdfTextExtractor.getTextFromPage( pdfReader, 1 ); 
    System.out.println( textFromPdfFilePageOne );
}  
catch ( Exception e ) {  
    // handle exception  
}  

如果上传的文件损坏,您可能会遇到以下错误:

com.itextpdf.text.exceptions.InvalidPdfException: Rebuild failed:   
  trailer not found.; Original message: PDF startxref not found.  

注意:要产生这样的异常,请尝试从网络保存PDF文件,但在中途中止它。
使用上面代码片段加载并检查是否安全加载。

您可以在iText API使用案例示例中找到详细的示例。


2
如何知道位图/图像文件是否已损坏? - DearDhruv
你能详细说明你的问题吗?你想如何使用 itext - Ravinder Reddy
1
我只需要知道是否有办法找出存储的图像是否损坏?[Android,Java] - DearDhruv
1
据我所知,目前没有检查图像是否损坏的方法。即使图像的一部分被存储了下来,它也可以在任何图像查看器中打开,并显示已存储的图像部分。 - Ravinder Reddy
这个StackOverflow上的回答如何确定照片是否已损坏?可能对你有用。 - Ravinder Reddy
谢谢提供链接,我会去看一下的。 - DearDhruv

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接