基本的に怠Diary

学習ログを残したい

Javaでディレクトリ検索とか

Javaを勉強しました。

 

今回勉強したのはファイル操作。

 

とりあえず作ったlsコマンド的なもの。

 

import java.io.File;
import java.util.Scanner;

class FileSearch{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        dirListPrint(sc.next());
    }
    //指定したディレクトリ下のファイルの一覧をコンソールに表示するよ
    private static void dirListPrint(String filePath){
        String sepa = System.getProperty("line.separator");
        StringBuilder sb = new StringBuilder("--" + filePath + sepa);
        File target = new File(filePath);
        if(target.isDirectory()){
            for(File file:target.listFiles()){
                sb.append(file.getName() + sepa);
            }
        }else{
            sb.append("これはディレクトリではありません。");
        }
        System.out.println(sb.toString());
    }

}

次は指定したディレクトリを再帰的に見ていくメソッドを作ってみました。


ちなみにここからはJava8から追加されたStreamというものをうまく?使ってみました。


後クラス分けました。そして正規表現っぽいのが入ってます

//実行クラス
import file.Search;
public class FileSearch {
    public static void main(String[] args){
        Search se = new Search();
        se.dirFullSearch("./","  ");
    }
}

package file;
import java.io.File;
import java.util.regex.Pattern;
import java.util.*;
/**
 * Created by Burden on 2016/08/20.
 */
//とりあえず検索するメソッドをとりあえず入れただけのクラス
public class Search {
    
    public void dirFullSearch(String filePath,String sepa){
        //強引に短くしてみた感。
        List<File> list = Arrays.asList(new File(filePath).listFiles());

        list.stream().forEach(p->{
            //倍倍。これ階層深い場合はまずいです。クラスフィールドにsepaもたせたらどうにかなるんじゃないんですか(適当
            System.out.println((sepa+sepa)+p.getPath());
            if(p.isDirectory()){
                dirFullSearch(p.getPath(),(sepa+sepa));
            }
        });
    }
}

思ってたより簡単にできたので後は正規表現で検索できたりすると良さそうですね多分。


とりあえずファイル系はこの程度でいいです。秋田。


Rubyに飽きてJavaやってましたがこちらも飽きたのでRubyに戻ります。