apache pdf框中的合并文档方法不关闭输入流,这是正常的吗?

时间:2015-07-30 13:32:46

标签: pdfbox

我使用pdfbox合并文档列表。合并工作得非常好,但在完成之后,我尝试在Windows中删除文档,我收到此错误,告诉我该文件无法删除。

enter image description here

我知道如何解释这个错误。这意味着我的java程序中没有关闭流。然后我查看了pdfbox api中的mergeDocuments,我看到源文件(在名为sit的对象中)未关闭。这就是我想知道的原因,你认为这是一个错误(并且修正了以下我已经放入方法)或者你认为我需要在调用后关闭我的输入流mergeDocuments方法?

public void mergeDocuments(boolean useScratchFiles) throws IOException
{
    PDDocument destination = null;
    InputStream sourceFile;
    PDDocument source;
    if (sources != null && sources.size() > 0)
    {
        ArrayList<PDDocument> tobeclosed = new ArrayList<PDDocument>();

        try
        {
            Iterator<InputStream> sit = sources.iterator();
            destination = new PDDocument(useScratchFiles);

            while (sit.hasNext())
            {
                sourceFile = sit.next();
                source = PDDocument.load(sourceFile, useScratchFiles);
                tobeclosed.add(source);
                appendDocument(destination, source);
            }
            if (destinationStream == null)
            {
                destination.save(destinationFileName);
            }
            else
            {
                destination.save(destinationStream);
            }
        }
        finally
        {
            if (destination != null)
            {
                destination.close();
            }
            for (PDDocument doc : tobeclosed)
            {
                doc.close();
            }
            // begin fix
            for (InputStream sourceToClose : sources)
            {
                sourceToClose.close();
            }                
            // endfix
        }
    }
}

0 个答案:

没有答案