Java程序删除具有特定扩展名的文件

时间:2020-01-09 10:35:32  来源:igfitidea点击:

在本文中,我们将看到一个Java程序,该程序将从目录中删除所有具有特定扩展名的文件。

删除具有特定扩展名的所有文件的Java程序的工作原理如下

1实施FileNameFilter接口以列出具有给定扩展名的文件。
2遍历这些文件以使用delete方法将其删除。

Java中的FileNameFilter接口

本节提供了FileNameFilter接口的一些背景知识以及实现此接口需要做什么。在FilenameFilter接口中,有一个方法accept()。

accept(File dir,String name)–测试指定的文件是否应该包含在文件列表中。

通过实现此方法,我们可以测试传递的目录中的每个文件。如果文件具有所需的扩展名,则将其包括在内,否则丢弃。

另一点是如何将具有给定扩展名的文件包括在列表中,因为有一个File.list()方法采用FilenameFilter的实例。

String [] list(FilenameFilter filter)–返回一个字符串数组,用于命名此抽象路径名表示的满足指定过滤器的目录中的文件和目录。

Java程序删除具有特定扩展名的文件

FileNameFilter是一个功能接口,这意味着它也可以作为lambda表达式实现。以下Java程序将FileNameFilter实现为lambda表达式。在程序文件中,扩展名为" .bckup"的文件将被删除。

public class DeleteFilteredFiles {
  public static void main(String[] args) throws IOException {
    // Folder from which files are fetched
    File file = new File("F:\theitroad");
    // file Extension 
    String extension = ".bckup";
    // Implemented as lambda. filter all the files
    // having passed extension
    File[] fileList = file.listFiles((d,f)-> f.toLowerCase().endsWith(extension));
              
    // Delete all the included files
    for(File f : fileList) {
      System.out.println(f.getAbsolutePath());
      if(!f.delete())
        throw new IOException("Not able to delete file: " + f.getAbsolutePath());
    }
  }
}

如果我们不想使用Lambda表达式,则可以通过将FileNameFilter实施为匿名类来完成同样的事情。

public class DeleteFilteredFiles {
  public static void main(String[] args) throws IOException {
    // Folder from which files are fetched
    File file = new File("F:\theitroad");
    // file Extension 
    String extension = ".bckup";
    // Implemented as lambda. filter all the files
    // having passed extension
    File[] fileList = file.listFiles(new FilenameFilter() {			
      @Override
      public boolean accept(File dir, String name) {
        if(name.toLowerCase().endsWith(extension))
          return true;
        else 
          return false;
      }
    });
              
    // Delete all the included files
    for(File f : fileList) {
      System.out.println(f.getAbsolutePath());
      if(!f.delete())
        throw new IOException("Not able to delete file: " + f.getAbsolutePath());
    }
  }
}