##はじめに
はじめまして、今年4月から新卒として働き始めたWebエンジニア1年生です。初投稿です!今後覚えた技術やスキルなどどんどんアウトプットしていきます。コードのミスや、こっちの方がベターだ、などあればコメントしていただけると幸いです。
よろしくお願いします!
##やりたいこと
階層数のわからないディレクトリから特定のファイルを含むパスを取得し出力するメソッド(searchFileメソッド)を作ります。ここでは、”C:\tmp”配下を探索し、”hoge”をファイル名に含むファイルパスを返すようにします。
##環境
Eclipse Oxygen
Java8
##手順
-
listFileメソッドで指定したパスのディレクトリ/ファイル一覧を配列に格納
-
取得した内容をループで取り出し、ファイルか否か評価し条件分岐
a. ファイル → 欲しいファイルかどうか評価
b. それ以外 → searchFileメソッドの再帰呼び出し
main.java
import java.io.File;
public class Main {
public static void main(String[] args) {
//探索したいパスを指定
searchFile("/tmp/");
}
public static void searchFile(String targetPath) {
File dir = new File(targetPath);
//パス配下のディレクトリ/ファイルを配列に入れる
File[] list = dir.listFiles();
for(File path : list) {
if(path.isFile()) {
//取得したパスをバックスラッシュで分割 "\\"ではなく"\\\\"を渡す
String[] splitedPath = path.toString().split("\\\\");
String file = splitedPath[splitedPath.length-1];
if(file.toString().contains("hoge")) {
System.out.println(path);
}
//fileがファイル以外ならメソッドの再帰呼び出し
}else {
searchFile(path.toString());
}
}
}
}
結果
\tmp\hogehoge\hoge.txt
##まとめ
階層数のわからないディレクトリを全て探索するには、条件分岐で自分自身を呼び出す再帰呼び出しをすることがポイントになるかと思います。