Java の FileFilter
このチュートリアルでは、Java で FileFilter を使用する方法を示します。
FileFilter は、特定の拡張子を持つファイルをフィルタリングするために使用されます。 Java 組み込みパッケージ IO と Apache Commons IO は、ファイル フィルター操作を実行するためのFileFilter
のクラスとインターフェイスを提供します。
Java の IO パッケージのFileFilter
FileFilter
は、指定されたパスのファイルとサブディレクトリのフィルターとして使用される Java IO パッケージのクラスです。 FileFilter
クラスは File
オブジェクトを受け取り、読み取り専用などの属性に基づいてそれらをフィルタリングします。
FileFilter
には accept()
という 1つのメソッドしかありません。このメソッドは、指定された要約をリストに含めるかどうかを確認するために使用されます。 accept()
メソッドの使用例を次に示します。
FileFilter Demo_Filefilter = new FileFilter() {
public boolean accept(File Demo_File) {
if (Demo_File.getName().endsWith(".txt")) {
return true;
}
return false;
}
};
FileFilter
を使用する最良の方法は、ディレクトリの場所を表す listfiles()
メソッドに 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 = 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 を使用して 2つのフィルターを結合します。 |
OrFileFilter |
論理 OR を使用して 2つのフィルターを結合します。 |
例で上記のメソッドからフィルターを使用してみましょう。
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 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