HOWTO · Java

Java의 FileFilter

이 자습서는 Java에서 FileFilter를 사용하는 방법을 보여줍니다.

이 페이지의 내용

이 자습서는 Java에서 FileFilter를 사용하는 방법을 보여줍니다.

FileFilter는 특정 확장자를 가진 파일을 필터링하는 데 사용됩니다. Java 내장 패키지 IO 및 Apache Commons IO는 파일 필터 작업을 수행하기 위해 FileFilter에 대한 클래스 및 인터페이스를 제공합니다.

Java의 IO 패키지에서 FileFilter

FileFilter는 지정된 경로의 파일 및 하위 디렉토리에 대한 필터로 사용되는 Java IO 패키지의 클래스입니다. FileFilter 클래스는 File 객체를 가져와 읽기 전용 등과 같은 속성을 기반으로 필터링합니다.

FileFilter에는 지정된 초록이 목록에 포함되어야 하는지 여부를 확인하는 데 사용되는 accept() 메서드가 하나만 있습니다. 다음은 accept() 메서드를 사용하는 방법의 예입니다.

FileFilter Demo_Filefilter = new FileFilter() {
  public boolean accept(File Demo_File) {
    if (Demo_File.getName().endsWith(".txt")) {
      return true;
    }
    return false;
  }
};

이제 FileFilter를 사용하는 가장 좋은 방법은 FileFilter를 디렉토리 위치를 나타내는 listfiles() 메서드에 전달하는 것입니다.

실행 예를 시도해 보겠습니다.

package delftstack;

import java.io.File;
import java.io.FileFilter;

public class Example {
  public static void main(String[] args) {
    File File_Directory = new File("C:\\Users\\Sheeraz\\eclipse-workspace\\Demos");

    // check if the directory is valid directory
    if (!(File_Directory.exists() && File_Directory.isDirectory())) {
      System.out.println(String.format("This Directory does not exist", File_Directory));
      return;
    }

    FileFilter Demo_Filefilter = new FileFilter() {
      public boolean accept(File Demo_File) {
        if (Demo_File.getName().endsWith(".txt")) {
          return true;
        }
        return false;
      }
    };

    File[] Text_Files = File_Directory.listFiles(Demo_Filefilter);

    for (File Demo_File : Text_Files) {
      System.out.println(Demo_File.getName());
    }
  }
}

위의 코드는 .txt 확장자를 가진 파일을 필터링합니다.

출력 참조:

delftstack.txt

FileFilter는 구문이 적고 훨씬 쉬운 람다 식을 사용하여 구현할 수도 있습니다.

예를 참조하십시오:

package delftstack;

import java.io.File;
import java.io.FileFilter;

public class Example {
  public static void main(String[] args) {
    File File_Directory = new File("C:\\Users\\Sheeraz\\eclipse-workspace\\Demos");

    // check if the directory is valid directory
    if (!(File_Directory.exists() && File_Directory.isDirectory())) {
      System.out.println(String.format("This Directory does not exist", File_Directory));
      return;
    }

    FileFilter Demo_FileFilter = (Demo_File) -> {
      return Demo_File.getName().endsWith(".txt");
    };

    File[] Text_Files = File_Directory.listFiles(Demo_FileFilter);

    for (File Demo_File : Text_Files) {
      System.out.println(Demo_File.getName());
    }
  }
}

위의 코드는 유사하게 작동하며 .txt 확장자를 가진 파일을 반환합니다.

출력 참조:

delftstack.txt

Java의 Apache Commons IO 패키지의 FileFilter

Apache Commons-IO의 FileFilter 패키지는 특정 확장자를 가진 파일 선택, 특정 문자로 시작하거나 끝나는 파일 등 다양한 파일 필터 작업을 수행하는 데 사용됩니다. Apache Commons의 FileFilter 패키지 프리미티브 및 부울 필터를 제공합니다. 즉, 필터 중 일부는 프리미티브 값과 부울 값을 반환합니다.

아래 표를 참조하십시오.

기본 필터:

방법 설명
DirectoryFilter 디렉토리만 허용합니다.
PrefixFileFilter 접두사를 기반으로 필터링합니다.
SuffixFileFilter 접미사를 기준으로 필터링합니다.
NameFileFilter 파일 이름을 기준으로 필터링하는 데 사용됩니다.
WildcardFileFilter 와일드카드를 기반으로 필터링하는 데 사용됩니다.
AgeFileFilter 파일의 마지막 수정 시간을 기준으로 필터링합니다.
SizeFileFilter 파일 크기를 기준으로 필터링합니다.

부울 필터:

방법 설명
TrueFileFilter 모든 파일을 수락합니다.
FalseFileFilter 파일을 허용하지 않습니다.
NotFileFilter 기존 필터에 논리 NOT를 적용합니다.
AndFileFilter 논리적 AND를 사용하여 두 필터를 결합합니다.
OrFileFilter 논리 OR을 사용하여 두 개의 필터를 결합합니다.

예제에서 위 방법의 필터를 사용해 봅시다.

package delftstack;

import java.io.File;
import java.io.IOException;
import org.apache.commons.io.filefilter.SuffixFileFilter;

public class Example {
  public static void main(String[] args) {
    try {
      Suffix_FileFilter();
    } catch (IOException iox) {
      System.out.println(iox.getMessage());
    }
  }
  public static void Suffix_FileFilter() throws IOException {
    // current directory
    File Current_Directory = new File(".");
    // all files and directories in the current directory
    String[] All_Files = Current_Directory.list();
    System.out.println("All files and directories :\n");
    for (int i = 0; i < All_Files.length; i++) {
      System.out.println(All_Files[i]);
    }
    System.out.println("\nThe Text Files: \n");
    String[] Text_Files = Current_Directory.list(new SuffixFileFilter("txt"));
    for (int i = 0; i < Text_Files.length; i++) {
      System.out.println(Text_Files[i]);
    }
  }
}

위의 코드는 SuffixFileFilter를 사용하여 주어진 디렉토리에서 텍스트 파일을 필터링합니다. 또한 제공된 폴더의 모든 파일과 하위 디렉터리를 나열합니다.

출력을 참조하십시오.

All files and directories :

.classpath
.gitignore
.project
bin
delftstack.fxml
delftstack.fxml.bak
delftstack.pdf
Delftstack.png
delftstack.txt
delftstack.xml
delftstack.zip
DemoClassBytes.ser
employee.json
ExampleClassBytes.ser
Makefile
pom.xml
PythonFromJava.py
readme.md
src
student.json

The Text Files:

delftstack.txt