问题仅从根文件夹获取文件名并使用java Files.walk跳过其子目录

时间:2019-06-17 13:06:07

标签: java file-io java-stream nio

我有一个包含三个文件和2个子文件夹的文件夹。我只想从该根文件夹中读取包含文件名的路径作为字符串,但是唯一的条件是我要排除位于同一文件夹中的其他目录。

文件夹结构:

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

我期望的结果

我想要做的就是将fileA.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(), calculate total size处尝试了以下答案,但无法使我的程序正常工作。也许我错过了一些微不足道的东西。

编辑:

从性能的角度来看,最好不要让程序遍历子文件夹中的每个项目,因为这些子目录将来可能包含1000多个文件。

1 个答案:

答案 0 :(得分:0)

好的,所以我尝试使用@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,现在效果很好:)