Scala中如何根据文件路径列表拼接处理多个资源流内容
问题根因
你使用的foreach方法仅用于遍历执行无返回值的操作,返回类型为Unit,无法收集每个文件的处理结果进行拼接,所以无法得到预期的字符串数组。
正确实现方案
使用flatMap替代foreach,可以将每个文件处理后得到的Array[String]自动扁平化拼接为最终的单个数组,同时建议添加资源释放逻辑避免资源泄漏:
import scala.io.Source val filePathList = List("/File1", "/File2") val inputStreamAsString: Array[String] = filePathList .flatMap { filePath => // 读取对应路径的资源流 val inputStream = getClass.getResourceAsStream(filePath) val source = Source.fromInputStream(inputStream) try { source.mkString.split(",") .filter(_.trim.nonEmpty) } finally { // 手动关闭Source避免资源泄漏 source.close() } }.toArray
代码说明
flatMap会遍历每个文件路径,对每个路径执行对应处理逻辑得到一个Array[String],最后把所有数组合并为一个大的集合,最后调用toArray转为你需要的数组类型- 增加
try-finally块保证Source资源被正确关闭,避免长期运行时出现资源泄漏问题 - 简化了过滤逻辑的写法,
_.trim.nonEmpty等价于原有queryStr => queryStr.trim.length != 0的效果
内容的提问来源于stack exchange,提问作者Anirban Goswami
相关产品推荐
相关产品推荐

