【Java入門】フィルタを使用してFileを一覧化する方法

Javaでファイル操作に使用するFileクラスにはさまざまな機能があります。

この記事では、ファイル操作で必要な、

・ファイルを一覧化する方法
・フィルタを使用して一覧化する方法

という基本的な内容から、

・指定文字列でファイルをフィルタリングする
・拡張子を指定してファイルをフィルタリングする

などの応用的な使い方に関しても解説していきます。

今回はそんなファイルをフィルタリングする方法について、さまざまな方法をわかりやすく解説します!

ファイルの一覧を取得する方法

指定したディレクトリに存在するファイルを一覧化するためには、FileクラスのlistFilesメソッドを使用します。

listFilesメソッドは、ファイルの配列を定義して使用します。listFilesは配列の要素に存在するファイル名が格納されます。

public File[] listFiles()

以下にlistFilesメソッドを使用した、ファイルの一覧を取得する方法を記述します。

public class fileClass{
	public fileClass() throws IOException{
		
		File dir = new File("/Users/Shared/java");
		
		//ファイルの一覧を取得する
		File[] filename = dir.listFiles();

		//結果を出力する
		for(int i=0; i<filename.length; ++i){
			System.out.println("file name : " + filename[i]);
		}
	}
}
実行結果
file name : /Users/Shared/java/java.csv
file name : /Users/Shared/java/java.txt
file name : /Users/Shared/java/java1.txt
file name : /Users/Shared/java/java2.txt
〜

ファイルの一覧を取得するためには、Fileオブジェクト生成時にファイルを一覧化する対象のディレクトリを指定します。

Fileクラスの配列を定義して、Fileクラスのオブジェクトdirに対してlistFilesメソッドでファイルの一覧を取得しています。

フィルタを使用する方法

上述したようにlistFilesメソッドを使用すれば、ファイルの一覧を取得することができますが、ファイルの数が膨大な場合、特定のファイルを見つけるのが困難な場合があります。

そのような場合は、指定した条件のファイルのみをフィルタリングするFilenameFilterクラスを使用します。

FilenameFilterクラスを使用するためには「import java.io.FilenameFilter」をインポートします。

また、FilenameFilterクラスはインタフェースとして実装されており、指定されたファイルをリストに含めるか判定するためのacceptメソッドを指定する必要があります。

boolean accept(File dir, String name)

指定文字列でフィルタする

以下にFilenameFilterクラスを使用した、ファイルをフィルタリングする方法を記述します。

public class fileClass{
	public fileClass() throws IOException{
		
		//フィルタを作成する
		FilenameFilter filter = new FilenameFilter() {
			
			public boolean accept(File file, String str){
				
				//指定文字列でフィルタする
				//indexOfは指定した文字列が見つからなかったら-1を返す
				if (str.indexOf("java")  != -1){
					return true;
				}else{
					return false;
				}				
			}
		};
		
		//“java”が含まれるフィルタを作成する
		File[] files = new File("/Users/Shared/java").listFiles(filter);
		
		//結果を出力する
		for(int i=0; i<files.length; ++i){
			System.out.println(files[i]);
		}
	}
}
実行結果
/Users/Shared/java/java.csv
/Users/Shared/java/java.txt
/Users/Shared/java/java1.txt
/Users/Shared/java/java2.txt
/Users/Shared/java/javaIn.txt
/Users/Shared/java/javaOut.txt

サンプルでは、フィルタリングしたファイルを一覧化するためにFileクラスのlistFilesメソッドを使用し、引数にFilenameFilterクラスのオブジェクトを指定しています。

FilenameFilterクラスの処理では、acceptメソッドの処理で指定した文字列が存在した場合はtrueを、存在しなかった場合はfalseを返します。

実行結果のとおり、指定した文字列”java”が含まれているファイル名だけが、リストとして取得されていることがわかります。

また、指定した文字列を検索するには、StringクラスのindexOfメソッドを使用する必要があります。indexOfについては以下の記事で詳しく解説しています。

拡張子でフィルタする

ファイルを指定した拡張子のみリスト化する場合には、acceptメソッドの処理内でStringクラスのendsWithメソッドを使用して、引数に拡張子を指定します。

以下にファイルの拡張子を指定してリスト化する方法を記述します。

public class fileClass{
	public fileClass() throws IOException{
		
		//フィルタを作成する
		FilenameFilter filter = new FilenameFilter() {
			
			public boolean accept(File file, String str){
								
				// 拡張子を指定する				
				if (str.endsWith("txt")){
					return true;
				}else{
					return false;
				}
			}
		};
		
		//"txt"が含まれるフィルタを作成する
		File[] files = new File("/Users/Shared/java").listFiles(filter);
		
		//結果を出力する
		for(int i=0; i<files.length; ++i){
			System.out.println(files[i]);
		}
	}
}
実行結果
/Users/Shared/java/java.txt
/Users/Shared/java/java1.txt
/Users/Shared/java/java2.txt
/Users/Shared/java/javaIn.txt
/Users/Shared/java/javaOut.txt
/Users/Shared/java/php.txt
/Users/Shared/java/php2.txt

サンプルでは、endsWithメソッドで拡張子”.txt”を指定し、ファイルが存在したらtrueを返却しています。

なお、ファイルの最初の文字列を指定して検索する場合には、startsWithメソッドを使用します。

Fileクラスについてもっと詳しく知りたい方へ

Fileクラスのさまざまな使い方については、以下の記事にまとめていますので、ぜひ参考にしてくださいね!

まとめ

ここでは、指定したディレクトリの中のファイル一覧を取得する方法や、一覧の中から指定した文字列や拡張子でフィルタリングする方法を説明しました。

ファイルの数が膨大な場合は、指定した条件を含むファイルを一覧化するのにFilenameFilterクラスを使用すると便利ですのでぜひ覚えておきましょう。

もしファイルをフィルタする処理を忘れてしまったら、この記事を思い出してくださいね!

LINEで送る
Pocket

ITエンジニアへ転職したい方におすすめ

自分を評価してくれる企業に転職して年収を上げたい! 自分のスキルにあった独自案件を知りたい!
エンジニアは今もっとも注目されている職業の1つ。エンジニアになって年収を増やしたい方や、あなたのスキルに見合った企業へ転職したいエンジニアの方も多いですよね。

しかし、大手の転職媒体は扱う求人数が多くても、誰もが登録しているので競争率もかなり高くなっています。そのため、あなたの条件に見合った企業を見つけても転職するためには、相応の努力とスキルが必要となります。

こういった媒体では、未経験からエンジニアを目指す方やエンジニア歴2〜3年で転職を考えている方にとって、最適な転職環境とはいえません。

そこでオススメしたいのが、未経験者や若手エンジニア向けの独自案件を多く掲載している「侍ワークス」です。

侍ワークスは、独自案件を多く掲載しているだけでなく、

・応募から就業まで一貫したサポート

・就業後もアフターフォロー

といった経験の浅い方や初めてエンジニアを目指す方にも安心のフォロー体制が整っています。もちろん登録は完全無料!しかも案件を見るだけなら登録も不要です。

まずは、お気軽にどんな求人があるか見てみてください。あなたにピッタリの企業がきっと見つかりますよ! 侍ワークスの求人情報を見る

書いた人

侍ブログ編集部

侍ブログ編集部

侍エンジニア塾は「人生を変えるプログラミング学習」をコンセンプトに、過去多くのフリーランスエンジニアを輩出したプログラミングスクールです。プログラミングに役立つ情報や有用な情報を発信していきます。
サービスページはこちら
ツイッターはこちら
フェイスブックはこちら