【问题标题】:Scala - how to loop through only files that match a specific string in directory?Scala - 如何仅遍历与目录中特定字符串匹配的文件?
【发布时间】:2023-03-23 08:11:01
【问题描述】:

我有一个目录,其中的文件看起来像 part-00000、part-00001 等。还有其他文件我不想遍历,所以我想做某种形式的模式匹配/regex/过滤以“part-”开头的文件名。

如何仅遍历以“part-”开头的文件?

【问题讨论】:

标签: java regex scala


【解决方案1】:

你可以使用过滤器:

new File("c:/sequence-files/").listFiles.filter(_.getName.startsWith("part-")).foreach(println)

【讨论】:

    【解决方案2】:
    1. 您可以使用此正则表达式 part-.* 例如 (demo)
    2. 如果其余部分只包含数字,则可以使用part-\d* (demo)
    3. 如果您只想进行部分-后跟5个数字part-\d{5,5}demo

    【讨论】:

      【解决方案3】:

      前提是你已经有了文件列表:

      object Test {
         def main(args: Array[String]) {
             val listOfFiles = List("part-00000", "part-00001", "randomFile", "part-00003", "randomFile2", "part-00004")
             val prefix = "part-"
      
             listOfFiles.filter(_.startsWith(prefix)).map(println)
         }
      }
      

      我们获取列表并首先应用一个过滤器,然后映射每个元素。 你可以在 map 中添加任何你想要的逻辑。

      【讨论】:

        【解决方案4】:

        你可以这样定义一个函数:

        def listFiles(file: File, pattern: String): Array[File] = {
          val files = file.listFiles()
          val regex = pattern.r
          files
          .filter(f => f.isFile() && regex.findFirstIn(file.getName).isDefined)
          .toArray
        }
        

        并使用directorypattern 调用它。由于您想要所有以part- 开头的文件,因此模式将为part-*。下面是示例调用

        val files = listFiles(new File("path), "part-*")
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-05-27
          • 1970-01-01
          • 1970-01-01
          • 2018-07-15
          • 2019-01-16
          相关资源
          最近更新 更多