1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[Java8] ディレクトリを探索しファイルを取得

Last updated at Posted at 2018-05-12

##はじめに
はじめまして、今年4月から新卒として働き始めたWebエンジニア1年生です。初投稿です!今後覚えた技術やスキルなどどんどんアウトプットしていきます。コードのミスや、こっちの方がベターだ、などあればコメントしていただけると幸いです。
よろしくお願いします!

##やりたいこと
階層数のわからないディレクトリから特定のファイルを含むパスを取得し出力するメソッド(searchFileメソッド)を作ります。ここでは、”C:\tmp”配下を探索し、”hoge”をファイル名に含むファイルパスを返すようにします。
##環境
Eclipse Oxygen
Java8
##手順

  1. listFileメソッドで指定したパスのディレクトリ/ファイル一覧を配列に格納

  2. 取得した内容をループで取り出し、ファイルか否か評価し条件分岐
    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

##まとめ
階層数のわからないディレクトリを全て探索するには、条件分岐で自分自身を呼び出す再帰呼び出しをすることがポイントになるかと思います。

1
1
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?