如何使用Java删除具有特定名称的文件和文件夹以及这些文件夹中的所有文件

时间:2019-01-26 17:49:37

标签: java

我正在尝试制作一个非常简单的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();
        }
}

1 个答案:

答案 0 :(得分:0)

您可以使用Apache Commons IO FileUtil(或至少看看source)来代替File.delete():

FileUtil.deleteDirectory(newDirectoryStreamItem);

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