我使用pdfbox合并文档列表。合并工作得非常好,但在完成之后,我尝试在Windows中删除文档,我收到此错误,告诉我该文件无法删除。
我知道如何解释这个错误。这意味着我的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
}
}
}