マーキングファイルを探して
2015/12/28
2021/04/17
■
java8
stream
マーキングファイル
java8です。
簡単なアプリケーションを作るときに、よく悩むのは、設定ファイルの置き場とか、作業ディレクトリの特定なのですが、昔から、マーキングファイルをおいて、アプリケーションから、そのマーキングファイルを探して、そこを作業場所にするという方法をよくとります。
マーキングファイルを探す場合、簡単な再帰メソッドを用意して、特定のクラスから、ルート(parent)に向かって探す方法をとります。再帰を使う理由は、自分がわかりやすいからなのですが、毎回、2つメソッドを用意して記述していたので、それが不満でした。
で、今回、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);
}
}
: