マーキングファイルを探して 2015/12/28
2021/04/17

java8です。
簡単なアプリケーションを作るときに、よく悩むのは、設定ファイルの置き場とか、作業ディレクトリの特定なのですが、昔から、マーキングファイルをおいて、アプリケーションから、そのマーキングファイルを探して、そこを作業場所にするという方法をよくとります。

マーキングファイルを探す場合、簡単な再帰メソッドを用意して、特定のクラスから、ルート(parent)に向かって探す方法をとります。再帰を使う理由は、自分がわかりやすいからなのですが、毎回、2つメソッドを用意して記述していたので、それが不満でした。

で、今回、java8に用意されているものを使って書き直してみました。


以下


import java.io.File;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.Arrays;
import java.util.Optional;
import java.util.function.Predicate;

public class MainTest {

 public static void main(String[] args) throws URISyntaxException {
  Optional<File> optional = findMarkingFile("__HOME__");
  System.out.println(optional.isPresent());
 }

 static public Optional<File> findMarkingFile(String name) throws URISyntaxException {
  URL url =  MainTest.class.getResource("/");
  File file = new File(url.toURI());

  Predicate<File> predicate = (File f)->{
   return (f.getName().equals(name));
  };
 
  do {
   Optional<File> optional = Arrays.asList(file.listFiles()).stream().filter(predicate).findFirst();
   if (optional.isPresent()) {
    return optional;
   }
   file = file.getParentFile();
  }while(file != null);
  
  return Optional.ofNullable(null);
 }
 
}


: