file.delete无法删除文件问题
1. file.delete()无法删除文件的问题排查思路
一般来讲file.delete() 方法,无法删除文件有以下常见几种原因:
- 是不是本地打开该文件,导致系统占用
- 代码针对该文件的流操作是否全部关闭,导致文件被java进程占用
提示:操作无法完成,因为文件已在 Java(TM) Platform SE binary 中打开
- 要删除的文件名称路径是否有错,导致文件不存在
- 假如是文件夹需要看文件夹下是否有文件,一般文件夹下有文件,删除虽然不会报错,但是返回false,也不能删除。
- 检查权限问题,程序是否有删除文件的权限,尤其是Linux下的存放目录
如果因上述原因无法成功删除文件,依然会返回删除成功,这个还是需要仔细一些,看文件到底是否删除成功。
2. 看下面例子
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
这个依照情况而定,不解决实际问题,一般来说还是需要关闭流操作。
欢迎一起来学习和指导,谢谢关注!
本文来自博客园,作者:xiexie0812,转载请注明原文链接:https://www.cnblogs.com/mask-xiexie/p/16224012.html
分类:
java
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 我与微信审核的“相爱相杀”看个人小程序副业
· DeepSeek “源神”启动!「GitHub 热点速览」
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库