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() という 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