private File createFooter(File originalFile) {
String path = new ClassPathResource("/").getPath();
File newfile = new File(path + "page" + originalFile.getName());
Document document = null;
try {
PdfReader reader = new PdfReader(originalFile.getAbsolutePath());
// 原本写法
// document = new Document(new PdfReader(originalFile.getAbsolutePath()).getPageSize(1));
document = new Document(reader.getPageSize(1));
PdfCopy copy = new PdfCopy(document, new FileOutputStream(newfile));
document.open();
int pagesNum = 0;//总页码
int pages = 0;//当前页码
//PdfReader reader = new PdfReader(originalFile.getAbsolutePath());
pagesNum += reader.getNumberOfPages();
PdfCopy.PageStamp stamp;//插入页码所需 不要页码可删除
int n = reader.getNumberOfPages();
for (int j = 1; j <=n ; j++) {
pages++;
document.newPage();
PdfImportedPage page=copy.getImportedPage(reader,j);
stamp=copy.createPageStamp(page);//插入页码所需 不要页码可删除
ColumnText.showTextAligned(stamp.getUnderContent(), Element.ALIGN_CENTER,new Phrase(String.format("第%d页/共%d页", pages, pagesNum)),475f,30f,0f);//插入页码所需 不要页码可删除
stamp.alterContents();//插入页码所需 不要页码可删除
copy.addPage(page);
reader.close();
copy.close();
} catch (IOException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
}finally {
if (!Objects.isNull(document)) {
document.close();
return newfile;
在例子中发现所有流都是关闭的但是就是针对originalFile删除不了,而newfile可以删除
仔细观察发现(上面代码已经标注了)
在打开document中的方法是直接写了
❗ document = new Document(new PdfReader(originalFile.getAbsolutePath()).getPageSize(1));
导致PdfReader没有被关闭,所以删除失败(一定要仔细一些)。
3. 特殊情况(zip压缩文件)
zip压缩文件,zipFile最后一定要close;
调用:❗ java.util.zip.ZipFile.close()方法关闭ZIP文件
关闭此ZIP文件将关闭以前由调用getInputStream()方法返回的所有输入流。这个方法连流都给我们关闭了!就不用我们手动关闭zip文件的流了,最后在调用file.delete()方法就可以删除文件了
4. (终极办法)直接通过new File("文件的绝对路径");然后执行file.delete()便可成功删除。
File file = new File("D:/a.jpg");
file.delete(); //返回结果就是true
这个依照情况而定,不解决实际问题,一般来说还是需要关闭流操作。