我有一个包含三个文件和 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/