1 package yukihane.inqubus.filewatch;
3 import java.nio.file.Path;
4 import java.util.Collection;
5 import java.util.SortedSet;
6 import java.util.TreeSet;
7 import java.util.regex.Matcher;
8 import java.util.regex.Pattern;
9 import org.apache.commons.io.FilenameUtils;
15 public final class FileWatchUtil {
16 // TODO スレッドID指定の場合の考慮も必要か
18 private static final Pattern VIDEO_ID_PATTERN = Pattern.compile("(\\w\\w\\d+)");
20 private FileWatchUtil() {
24 * 指定された文字列で始まる動画IDを検索します.
25 * @param paths 検索対象のファイルパス.
26 * @param startText この文字で始まる動画ID一覧を出力します.
27 * @return 条件に当てはまる動画ID一覧.
29 public static SortedSet<String> getVideoIdsStartWith(Collection<Path> paths, String startText) {
30 final SortedSet<String> set = new TreeSet<>();
31 for (Path p : paths) {
32 final String name = FilenameUtils.getBaseName(p.toString());
33 final Matcher m = VIDEO_ID_PATTERN.matcher(name);
35 final String alt = m.group(1);
36 if (alt.startsWith(startText)) {
45 * 指定した文字列を含むファイル名一覧を取得します.
46 * @param paths 検索対象のファイルパス.
47 * @param text ファイル名にこの文字列を含むパスを抽出します.
48 * @return 条件に合致するファイルのフルパス.
50 public static SortedSet<String> getFileNamesContain(Collection<Path> paths, String text) {
51 final SortedSet<String> set = new TreeSet<>();
52 for (Path p : paths) {
53 final String name = FilenameUtils.getBaseName(p.toString());
54 final Matcher m = VIDEO_ID_PATTERN.matcher(name);
56 final String alt = m.group(1);
57 if (alt.equals(text)) {
58 set.add(p.toAbsolutePath().toString());