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

标签 java file-io java-stream nio

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

文件夹结构:

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

我的期望

我想要的是将 fileA.xlsx 和 FileB.xlsx 的路径保存为列表中的字符串,即

[文件夹A/fileA.xlsx,文件夹A/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 个文件。

最佳答案

好吧,我尝试了 @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.list 更改 Files.walk,现在效果很好:)

关于java - 使用 java Files.walk 仅从根文件夹获取文件名并跳过其子目录时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56631986/

相关文章:

java - Spring Integration Java DSL 中的 WireTap 配置

c# - 将文件保存在临时目录中是否被认为是好的/可接受的做法?

matlab - 使用 cell2mat 将数字矩阵与字符串向量(列标签)连接起来的问题

java - 如何使用流覆盖重复创建 HashMap?

Java 8. collection.stream() 和 Stream.of(collection) 的区别

java - 什么是 HibernateTemplate 类?

java - 在 Spring Batch 中将 writer 添加到相同的 datfile 中

java 8 生成二的倍数的流

python - 以 "w"模式打开文件 : IOError: [Errno 2] No such file or directory

java - 是否可以在 Android API < 24 上使用 Java 8 Stream API?