Java 8路径筛选器文件名

5

我正在尝试过滤以“EMP”开头的文件,位于文件夹“C://Temp”中,并尝试返回“路径”列表。我尝试了下面的代码,但它总是返回空列表。我做错了什么语法错误吗?

String directoryPath = "C://Temp";                            
String partOfFileName = "EMP";                           
List<Path> fileNames = Files.list(Paths.get(directoryPath))                               
                .filter(line -> line.toString().startsWith(partOfFileName))
                .map(Path::getFileName)                                    
                .collect(Collectors.toList());                             

我的筛选器是为了找到以EMP开头的文件...当我说Files.list时,它应该列出目录中的所有文件。 - reddynr
它确实会返回完整路径。 - shmosel
只是一个更新,如果我提到“line -> line.toString().contains(partOfFileName)”而不是“line -> line.toString().startsWith(partOfFileName)”,它会获取文件名,但是我对文件的绝对路径感兴趣...有没有办法映射绝对路径? - reddynr
1
使用 toAbsolutePath - user7294900
谢谢您的快速回复。它起作用了。 - reddynr
显示剩余3条评论
3个回答

4

由于您正在检查完整路径,因此您可能希望使用“endsWith”而不是“startsWith”来检查直接目录。

如果您现在位于“folder1/folder2/test”,并且使用startsWith,则将检查并尝试过滤第一个目录“folder1”。

   try {
        List<Path> fileNames = Files.list(Paths.get(directoryPath))
                .filter(line -> line.endsWith(partOfFileName))
                .map(Path::getFileName)
                .collect(Collectors.toList());

    } catch (IOException e) {
        e.printStackTrace();
    }

2

Path.toString() 返回完整的路径表示。如果您想按文件名进行过滤,请在筛选操作中调用 getFileName()

String directoryPath = "C://Temp";
String partOfFileName = "EMP";
List<Path> fileNames = Files.list(Paths.get(directoryPath))
        .filter(path -> path.getFileName().startsWith(partOfFileName))
        .collect(Collectors.toList());

通过 getFileName,它仍然没有检索到任何结果。 - reddynr
我不明白你在说什么。 - shmosel

0

我也遇到了同样的问题,这个解决了它

Files.list("path/to/the/directory").
        filter(path -> path.getFileName().toString().startsWith("the name I want")).collect(Collectors.toList());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接