file.delete无法删除文件解决

file.delete无法删除文件解决file delete 无法删除文件的问题排查思路一般遇到这种问题 需要思考 没有删除的文件是什么原因造成的 常见的有 1 第一种是不是你本地打开该文件 导致系统占用该文件 这种先自查 2 代码种有对该文件操作的流未全部关闭 导致文件被 java 进程占用无法上传 3 要删除的文件名称路径是否有错误 导致文件不存在 4 假如是文件夹需要看文件夹下面是否有文件 一般文件夹如果有文件 删除虽然不会报错 但是返回的是 false 也不能删除 上代码 第一版第一次考虑到可能是文件被占用 所以使用

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

一般遇到这种问题,需要思考,没有删除的文件是什么原因造成的,常见的有:

1. 第一种是不是你本地打开该文件,导致系统占用该文件,这种先自查。
2. 代码种有对该文件操作的流未全部关闭,导致文件被java进程占用无法上传。
3. 要删除的文件名称路径是否有错误,导致文件不存在。
4. 假如是文件夹需要看文件夹下面是否有文件,一般文件夹如果有文件,删除虽然不会报错,但是返回的是false,也不能删除。

上代码:第一版 第一次考虑到可能是文件被占用,所以使用GC打算释放资源,结果失败了

/ * @description: 删除单个文件 * @params [descDir] * @author: silencer * @version: 1.0.Rel * @date: 2021/4/2 11:30 */ public static void deleteZipFile(String descDir) { 
    File file =new File(descDir); File[] files = file.listFiles(pathname -> { 
    if (pathname.isFile() && pathname.getName().endsWith(".zip")) { 
    return true; } return false; }); Arrays.stream(files).forEach(e->{ 
    logger.info("已删除源文件:{}",files.length); System.gc(); e.delete(); }); } 

改正后 第二版 细看 发现是zip文件流未关闭,关闭即可

 /* * @description: 解压文件到指定目录 * @params / * @author: silencer * @version: 1.0.Rel * @date: 2021/4/2 11:08 */ public static void unZipFiles(File zipFile, String descDir) throws IOException { 
    File pathFile = new File(descDir); if (!pathFile.exists()) { 
    pathFile.mkdirs(); } //解决zip文件中有中文目录或者中文文件 ZipFile zip = new ZipFile(zipFile, Charset.forName("GBK")); for (Enumeration entries = zip.entries(); entries.hasMoreElements(); ) { 
    ZipEntry entry = (ZipEntry) entries.nextElement(); String zipEntryName = entry.getName(); InputStream in = zip.getInputStream(entry); String outPath = (descDir + zipEntryName).replaceAll("\\*", "/"); //判断路径是否存在,不存在则创建文件路径 File file = new File(outPath.substring(0, outPath.lastIndexOf('/'))); if (!file.exists()) { 
    file.mkdirs(); } //判断文件全路径是否为文件夹,如果是上面已经上传,不需要解压 if (new File(outPath).isDirectory()) { 
    continue; } //输出文件路径信息 System.out.println(outPath); OutputStream out = new FileOutputStream(outPath); byte[] buf1 = new byte[1024]; int len; while ((len = in.read(buf1)) > 0) { 
    out.write(buf1, 0, len); } in.close(); out.close(); } //如果zip包不关闭,就无法删除zip zip.close(); //确保没有多层结构压缩文件 //删除压缩文件 zipFile.delete(); // 递归查找zip文件,解压并删除 recursion(descDir); } 

以上就解决了,写代码还是要细心一点,仔细检查有时候不是什么大问题,而是我们太粗心。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/227434.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午9:19
下一篇 2026年3月16日 下午9:19


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号