Java의 FileFilter

Sheeraz Gul 2023년10월12일
  1. Java의 IO 패키지에서 FileFilter
  2. Java의 Apache Commons IO 패키지의 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
작가: Sheeraz Gul
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook

관련 문장 - Java File