【问题标题】:How to delete file properly? [duplicate]如何正确删除文件? [复制]
【发布时间】:2023-03-04 12:47:01
【问题描述】:

我在使用 org.apache.commons.io.FileUtils 从 img 目录中删除文件时遇到问题。我正在使用此代码:

File dir = new File(".\\img");
    FileFilter fileFilter = new WildcardFileFilter(userId + ".*");
    File[] files = dir.listFiles(fileFilter);
    System.out.println("files found: " + files.length);
    for (int i = 0; i < files.length; i++) {
        boolean success = FileUtils.deleteQuietly(files[i]);
        System.out.println(files[i] + " delete result = " + success);
    }
}

实际上,该代码用于将 img 目录中存在的图像文件替换为新的。我需要使用新文件删除所有以前存在的名称为 n.* 的文件,例如n.png。如果我试图删除图像文件,我会得到变量成功的错误值,并且文件不会被删除。但不是图像文件,例如*.abc; *.acd; *.acdc 等被成功删除。这个问题是怎么回事?

【问题讨论】:

  • 末尾有一个右括号,没有匹配的左括号,缩进很奇怪。代码中是否缺少一些 if 语句?
  • 你能提供一个输出样本吗?
  • 为什么不尝试调用files[i].delete(),看看抛出了什么异常。
  • 尝试使用 jdk File.delete 方法而不是 deleteQuietly。我希望它会引发某种异常。如果有错误要解决,调试起来会容易得多。
  • 第二,FileUtils.deleteQuietly() "删除文件,从不抛出异常。"引用他们的 javadoc,因此无法使用此方法进行调试。

标签: java delete-file


【解决方案1】:

试试这个:

java.nio.file.Files.delete(files[i].toPath());

然后看看会抛出什么异常。

【讨论】:

    【解决方案2】:

    这段代码对我有用:

    File dir = new File("/home/abhijith/.img");
            FileFilter fileFilter = new WildcardFileFilter("abc"+".*");
            File[] files = dir.listFiles(fileFilter);
            System.out.println("files found: " + files.length);
            for (int i = 0; i < files.length; i++) {
                boolean success = org.apache.commons.io.FileUtils.deleteQuietly(files[i]);
                System.out.println(files[i] + " delete result = " + success);
            }
    

    这是输出:

    files found: 1
    /home/abhijith/.img/abc.jpg delete result = true
    

    【讨论】:

      猜你喜欢
      • 2021-08-15
      • 2014-04-17
      • 2016-11-29
      • 2020-06-19
      • 1970-01-01
      • 1970-01-01
      • 2019-06-18
      • 2012-12-22
      • 1970-01-01
      相关资源
      最近更新 更多