我有一个包含三个文件和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多个文件。
答案 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
,现在效果很好:)