java删除文件时总是返回false,删不掉的解决方案

目录
  • java删除文件时总是返回false,删不掉
    • 我的解决
  • java文件删除不了的坑,特别是压缩文件
    • 下面列举一些情况
    • java.util.zip.ZipFile.close()方法关闭ZIP文件

java删除文件时总是返回false,删不掉

今天写了个简单的文件删除的程序:代码如下:

public static boolean deleteFiles(File[] files){
  boolean flag = false;
  for(File file:files){
   // 路径为文件且不为空则进行删除
      if (file.isFile() && file.exists()) {
       flag = file.delete();
        System.out.println(flag);
      }
  }
  return flag;
 }

我的文件都是存在的,但是就是经常性的删不了,不知道怎么回事,我单独测试的时候是可以的,感觉很是奇怪,上网查,人家说是可能的情况有:

  • 1、多线程操作
  • 2、打开的文件流没有关闭
  • 3、需要垃圾回收下

我的解决

分析下我的情况,我的是单线程的,所以第一种情况不存在,第二种情况我关闭我所有打开的文件流但是还是不行,后来我在程序中加了行System.gc();,结果就真的可以了,一下是修改后的:

public static boolean deleteFiles(File[] files){
  boolean flag = false;
  for(File file:files){
   // 路径为文件且不为空则进行删除
      if (file.isFile() && file.exists()) {
       System.gc(); //加上确保文件能删除,不然可能删不掉
       flag = file.delete();
       System.out.println(flag);
      }
  }
  return flag;
 }

java文件删除不了的坑,特别是压缩文件

我们在用java删除文件的时候通常直接调用file.delete();方法就行了,但是很多情况下却删除不了

下面列举一些情况

  • 1、是文件夹且不为空,这个没什么好说的,可以先删除文件夹里的文件再删除这个文件夹
  • 2、被别的进程占用,这不仅java不能删,就算windows手动删也删不了
  • 3、跟这个文件的流没有关闭,这个是最常见的原因了

然而我遇到的是上传一个文件,然后跟这个文件有关的流也关闭了,还是删除不了,后来发现有人把这个文件偷偷的转换成zip压缩文件了。

然后删除这个bookFile死活删除不了,如果出现这种情况,这个zipFile最后一定要close;

java.util.zip.ZipFile.close()方法关闭ZIP文件

关闭此ZIP文件将关闭以前由调用getInputStream()方法返回的所有输入流。这个方法连流都给我们关闭了!就不用我们手动关闭zip文件的流了,最后在调用file.delete()方法就可以删除文件了

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • java 删除文件夹中的所有内容而不删除文件夹本身的实例

    实例如下: package com.xx; import java.io.File; public class Test { public static void main(String[] args) { String fileRoot = "C:/Users/xx/Desktop/xx/xxx"; delFolder(fileRoot); System.out.println("deleted"); } // // 删除完文件后删除文件夹 // // param

  • java file.renameTo返回false的原因及解决方案

    java file.renameTo返回false原因 需要对文件夹下的文件重命名,发现返回false了,先用main方法测试,发现没问题,如下 public static void main(String[] args) throws IOException { File file1 = new File("D:\\aabb.xml"); File file2 = new File("D:\\ccdd.xml"); boolean b = file1.rename

  • java删除文件和文件夹具体实现

    1,验证传入路径是否为正确的路径名(Windows系统,其他系统未使用)Java代码 复制代码 代码如下: // 验证字符串是否为正确路径名的正则表达式  private static String matches = "[A-Za-z]:\\\\[^:?\"><*]*";  // 通过 sPath.matches(matches) 方法的返回值判断是否正确  // sPath 为路径字符串 2,通用的文件夹或文件删除方法,直接调用此方法,即可实现删除文件夹或文件

  • java 文件目录读写删除操作详细实现代码

    一.获得控制台用户输入的信息 public String getInputMessage() throws IOException...{          System.out.println("请输入您的命令∶");          byte buffer[]=new byte[1024];          int count=System.in.read(buffer);          char[] ch=new char[count-2];//最后两位为结束符,删去不要

  • java删除文件时总是返回false,删不掉的解决方案

    目录 java删除文件时总是返回false,删不掉 我的解决 java文件删除不了的坑,特别是压缩文件 下面列举一些情况 java.util.zip.ZipFile.close()方法关闭ZIP文件 java删除文件时总是返回false,删不掉 今天写了个简单的文件删除的程序:代码如下: public static boolean deleteFiles(File[] files){ boolean flag = false; for(File file:files){ // 路径为文件且不为空

  • Java 删除文件及文件夹删除不了的解决

    目录 Java 删除文件及文件夹删除不了 问题所在 java文件删除不了的坑,特别是压缩文件 下面列举一些情况 Java 删除文件及文件夹删除不了 问题所在 今天在编写一个项目,流程是先创建一个临时文件夹存放生成的文件,再经过压缩导出,待导出成功后删除临时文件夹,但是怎么也删除不了,还以为是写的删除方法有问题,找来找去,试了很多方法也删除不了 本来以为是打包的流没关闭,但是发现流都是关闭的,后来发现,是在生成的方法里,直接new FileWriter出来的,没有关闭,在这里提醒一下,关于操作文件

  • 解决os.path.isdir() 判断文件夹却返回false的问题

    今天使用os.path.isdir()判断是否是文件夹的时候发现一个问题: lst = os.listdir(path) for i in lst: if os.path.isdir(i) 遍历到path下面的一个子文件夹时,os.path.isdir()却返回 false. 但如果使用如下处理,就能正常处理,返回true. lst = os.listdir(path) for i in lst: i = os.path.join(path, i) #=================〉这一行很

  • java删除文件夹下所有文件示例分享

    复制代码 代码如下: package org.sw; import java.io.File; public class DeleteFolder { /**     * 删除文件夹下的所有文件     * @param oldPath     */    public void deleteFile(File oldPath) {          if (oldPath.isDirectory()) {           System.out.println(oldPath + "是文件夹

  • Java删除文件、目录及目录下所有文件的方法实例

    前言 本文主要实现的功能是删除某个目录及目录下的所有子目录和文件,涉及到的知识点:File.delete()用于删除"某个文件或者空目录"!所以要删除某个目录及其中的所有文件和子目录,要进行递归删除. 具体代码示例如下: import java.io.File; public class DeleteDirectory { /** * 删除空目录 * @param dir 将要删除的目录路径 */ private static void doDeleteEmptyDir(String

  • Java下载文件时文件名乱码问题解决办法

    复制代码 代码如下: public static String toUtf8String(String s) { StringBuffer sb = new StringBuffer();              for (int i = 0; i < s.length(); i++) {                  char c = s.charAt(i);                  if (c >= 0 && c <= 255) {          

  • Java在创建文件时指定编码的实现方法

    目录 一.问题分析 二.字符编码 三 .问题解决 前言:最近,学习了Java IO流的相关的知识,想通过读写文件的方式练习和巩固所学知识.在使用File类创建文件时,突然想到,我该如何指定文件使用的编码呢? 进而想到,应该如何查看一个文件的编码呢? 一.问题分析 先去互联网上查找答案,结果如下: FileInputStream fis=new FileInputStream("xxxx.txt"): OutputStreamWriter osw=new OutputStreamWrit

  • Linux unlink函数和删除文件的操作方法

    1. unlink函数   对于硬链接来说,unlink 用来删除目录项,并把 inode 引用计数减 1,这两步也是一个原子过程.直到 inode 引用计数为 0,才会真正删除文件.   对于软链接来说,unlink 直接删除软链接,而不影响软链接指向的文件. 函数原型: int unlink(const char *pathname);   参数说明:   pathname:指定要移除的链接文件 返回值说明:   成功返回0:失败则返回-1,同时设置errno为相应值 2. 实验代码-myu

随机推荐