Найти файлы в папке с помощью Java - PullRequest
43 голосов
/ 31 января 2011

Что мне нужно сделать, если поиск в папке скажет C:\example

Затем мне нужно пройти через каждый файл и проверить, совпадает ли он с несколькими начальными символами, поэтому, если файлы начинаются

temp****.txt
tempONE.txt
tempTWO.txt

Итак, если файл начинается с temp и имеет расширение .txt, я хотел бы затем поместить это имя файла в File file = new File("C:/example/temp***.txt);, чтобы я мог затем прочитать файл, затем цикл должен перейти к следующему файлу.чтобы проверить, соответствует ли оно, как указано выше.

Ответы [ 12 ]

0 голосов
/ 16 июня 2019
  • Matcher. find и Files. walk методы могут быть опцией для поиска файлов более гибким способом
  • String. format объединяет регулярные выражения для создания ограничений поиска
  • Файлы. isRegularFile проверяет, является ли путь не каталогом, символической ссылкой и т. Д.

Использование:

//Searches file names (start with "temp" and extension ".txt")
//in the current directory and subdirectories recursively
Path initialPath = Paths.get(".");
PathUtils.searchRegularFilesStartsWith(initialPath, "temp", ".txt").
                                       stream().forEach(System.out::println);

Источник:

public final class PathUtils {

    private static final String startsWithRegex = "(?<![_ \\-\\p{L}\\d\\[\\]\\(\\) ])";
    private static final String endsWithRegex = "(?=[\\.\\n])";
    private static final String containsRegex = "%s(?:[^\\/\\\\]*(?=((?i)%s(?!.))))";

    public static List<Path> searchRegularFilesStartsWith(final Path initialPath, 
                             final String fileName, final String fileExt) throws IOException {
        return searchRegularFiles(initialPath, startsWithRegex + fileName, fileExt);
    }

    public static List<Path> searchRegularFilesEndsWith(final Path initialPath, 
                             final String fileName, final String fileExt) throws IOException {
        return searchRegularFiles(initialPath, fileName + endsWithRegex, fileExt);
    }

    public static List<Path> searchRegularFilesAll(final Path initialPath) throws IOException {
        return searchRegularFiles(initialPath, "", "");
    }

    public static List<Path> searchRegularFiles(final Path initialPath,
                             final String fileName, final String fileExt)
            throws IOException {
        final String regex = String.format(containsRegex, fileName, fileExt);
        final Pattern pattern = Pattern.compile(regex);
        try (Stream<Path> walk = Files.walk(initialPath.toRealPath())) {
            return walk.filter(path -> Files.isRegularFile(path) &&
                                       pattern.matcher(path.toString()).find())
                    .collect(Collectors.toList());
        }
    }

    private PathUtils() {
    }
}

Попробуйте начинается с регулярное выражение для \ txt \temp \ tempZERO0.txt:

(?<![_ \-\p{L}\d\[\]\(\) ])temp(?:[^\/\\]*(?=((?i)\.txt(?!.))))

Попробуйте окончаний с регулярное выражение для \ txt \ temp \ ZERO0temp.txt:

temp(?=[\\.\\n])(?:[^\/\\]*(?=((?i)\.txt(?!.))))

Try содержит регулярное выражение для \ txt \ temp \ tempZERO0tempZERO0temp.txt:

temp(?:[^\/\\]*(?=((?i)\.txt(?!.))))
0 голосов
/ 25 октября 2018

Вы указываете имя своего файла, путь к каталогу для поиска и позволяете ему выполнять работу.

private static String getPath(String drl, String whereIAm) {
    File dir = new File(whereIAm); //StaticMethods.currentPath() + "\\src\\main\\resources\\" + 
    for(File e : dir.listFiles()) {
        if(e.isFile() && e.getName().equals(drl)) {return e.getPath();}
        if(e.isDirectory()) {
            String idiot = getPath(drl, e.getPath());
            if(idiot != null) {return idiot;}
        }
    }
    return null;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...