【问题标题】:java 8 path filter file namejava 8 路径过滤文件名
【发布时间】:2018-12-18 23:32:05
【问题描述】:

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

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());                             

【问题讨论】:

  • 您为什么希望Path.toString() 回来?
  • 我映射的是文件名,而不是 .tostring
  • 您正在过滤toString()。
  • 我的过滤器是找出带有 EMP 的文件...当我说 Files.list 它应该列出我目录中的所有文件..
  • 使用toAbsolutePath

标签: java path


【解决方案1】:

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 也仍然没有检索到任何结果
  • 我不明白你在说什么。
【解决方案2】:

由于您正在检查完整路径,您可能希望使用“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();
    }

【讨论】:

    【解决方案3】:

    遇到同样的问题,解决了

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

    【讨论】:

      猜你喜欢
      • 2012-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-08
      • 2011-06-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多