【问题标题】:How to delete files AND folders with specific names, and all of the files within those folders with Java如何使用 Java 删除具有特定名称的文件和文件夹,以及这些文件夹中的所有文件
【发布时间】:2019-06-20 05:15:07
【问题描述】:

我正在尝试制作一个在几组文件之间切换的非常简单的 java 程序。为此,我试图删除预先存在的文件,然后从我正在谈论的“预设”之一中复制这些文件。但是,由于同一位置会有很多其他我不想触摸的文件,所以我只想删除具有特定前缀/名称的文件。

举例说明:

预设文件夹有:enbcache(包含子文件夹和项目的文件夹)、enbseries(包含子文件夹和项目的文件夹)和 enblocal.ini。

目标文件夹具有相同的文件和许多其他文件:enbcache(包含子文件夹和项目的文件夹)、enbseries(包含子文件夹和项目的文件夹)、enblocal.ini、data、d3d11.dll、tbb.dll、其他文件夹。 .等等

该程序应删除所有名称中带有“enb”的旧文件和文件夹,并保留其他所有内容。然后将“预设文件夹一”中的文件复制到目标文件夹中。

我发现了许多用 java 删除文件和文件夹的不同方法,以及删除特定文件的方法。但是,我遇到的问题是尝试结合这些东西时。 由于文件夹中的项目需要删除但没有“enb”前缀,因此程序无法删除文件夹,因为它仍然包含剩余文件。

我尝试过使用 NIO Java 7 和 8 以及仅使用 File 的更简单方法,但一直到无法删除包含项目的“enb”文件夹的同一点。 我将在这里发布某人提供的代码:

Delete Files with same Prefix String using Java

我目前正在尝试使用。

当使用“enb”前缀时,我遇到了前面描述的问题:它无法删除所有文件夹,因为其中一些文件夹中有没有“enb”前缀的文件。

public static void deleteFilesForPathByPrefix(final Path path, final String prefix) {
      try (DirectoryStream<Path> newDirectoryStream = Files.newDirectoryStream(path, prefix + "*")) {
            for (final Path newDirectoryStreamItem : newDirectoryStream) {
                Files.delete(newDirectoryStreamItem);
            }
        } catch (final Exception e) {
            e.printStackTrace();
        }
}

【问题讨论】:

    标签: java


    【解决方案1】:

    您可以使用 Apache Commons IO FileUtil(或者至少看看 source)而不是 File.delete():

    FileUtil.deleteDirectory(newDirectoryStreamItem);
    

    您不能(天真地)使用 delete(),因为您需要在删除目录本身之前递归地删除子目录的内容。

    【讨论】:

      猜你喜欢
      • 2019-10-19
      • 2019-01-03
      • 1970-01-01
      • 2011-01-14
      • 2012-04-01
      • 1970-01-01
      • 2018-06-21
      • 2012-10-13
      • 1970-01-01
      相关资源
      最近更新 更多