проблемы с получением имен файлов только из корневой папки и пропуском ее подкаталогов с помощью java Files.walk - PullRequest
0 голосов
/ 17 июня 2019

У меня есть папка с тремя файлами и 2 подпапками.Я только пытаюсь прочитать путь, включая имена файлов, в виде строки из этой корневой папки, однако единственное условие - я хочу исключить другие каталоги, расположенные в той же папке.

Структура папки:

Folder A
|
|
DirectoryA
fileA.xlsx, fileB.xlsx

Что я ожидаю

Все, что я хочу, это сохранить путь к файлу A.xlsx и FileB.xlsx в виде строки в списке, т.е.

[FolderA/fileA.xlsx, FolderA/fileB.xlsx]

Мой вывод:

Мой вывод также включает в себя содержимое файла из подкаталога, как показано ниже, который я не хочу.

[FolderA/DirectoryA/somefile.txt, FolderA/fileA.xlsx, FolderA/fileB.xlsx]

То, что я пытался

public List<String> getAllExcelFilesList() throws IOException {
    excelFilesList = new ArrayList<String>();
    excelFilesList = Files.walk(Paths.get(path_to_FolderA))
                     .filter(p -> p.getFileName().toString().startsWith("file"))
                     .filter(Files::isRegularFile)
                     .map(Path::toString)
                     .collect(Collectors.toList());
    LOG.info("all files saved to list for extraction");
    return excelFilesList;

Я также попробовал следующий ответ здесь Files.walk (), рассчитать общий размер , но не смог сделатьмоя программа для работы.может быть, я упускаю что-то очень незначительное.

РЕДАКТИРОВАТЬ:

с точки зрения производительности лучше, если программа не просматривает каждый элемент внутри подпапки, потому чтов будущем эти подкаталоги могут содержать более 1000 файлов.

1 Ответ

0 голосов
/ 17 июня 2019

хорошо, поэтому я попробовал комментарий @ holger, чтобы получить решение, и оно прекрасно работает. Ниже мое решение:

public List<String> getAllExcelFilesList() throws IOException {
    excelFilesList = new ArrayList<String>();
    excelFilesList = Files.list(Paths.get(path_to_FolderA))
                     .filter(p -> p.getFileName().toString().startsWith("file"))
                     .filter(Files::isRegularFile)
                     .map(Path::toString)
                     .collect(Collectors.toList());
    LOG.info("all files saved to list for extraction");
    return excelFilesList;

Я попытался изменить Files.walk с Files.list, и теперь это работает хорошо :)

...