file.delete无法删除文件问题

1. file.delete()无法删除文件的问题排查思路

 
一般来讲file.delete() 方法,无法删除文件有以下常见几种原因:
  1. 是不是本地打开该文件,导致系统占用
  2. 代码针对该文件的流操作是否全部关闭,导致文件被java进程占用
    提示:操作无法完成,因为文件已在 Java(TM) Platform SE binary 中打开
  1. 要删除的文件名称路径是否有错,导致文件不存在
  2. 假如是文件夹需要看文件夹下是否有文件,一般文件夹下有文件,删除虽然不会报错,但是返回false,也不能删除。
  3. 检查权限问题,程序是否有删除文件的权限,尤其是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
这个依照情况而定,不解决实际问题,一般来说还是需要关闭流操作。
posted @   xiexie0812  阅读(8850)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【.NET】调用本地 Deepseek 模型
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 我与微信审核的“相爱相杀”看个人小程序副业
· DeepSeek “源神”启动!「GitHub 热点速览」
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
点击右上角即可分享
微信分享提示