scala 读取txt文件的方法示例
作者:张乐1993 发布时间:2022-09-30 19:21:10
标签:scala,读取,txt
文件格式分别如下
package txt
object ReadTxt {
def readFromTxtByLine(filePath:String) = {
//导入Scala的IO包
import scala.io.Source
//以指定的UTF-8字符集读取文件,第一个参数可以是字符串或者是java.io.File
val source = Source.fromFile(filePath, "UTF-8")
//或取文件中所有行
//val lineIterator = source.getLines()
//迭代打印所有行
//lineIterator.foreach()
//将所有行放到数组中
val lines = source.getLines().toArray
source.close()
//println(lines.size)
lines
}
def LackingFileUtil(array:Array[String],keyMap:Map[String,String]) = {
// 使用for循环和until遍历Array / ArrayBuffer
// 使until是RichInt提供的函数
var lockMapList = List[Map[String,String]]()
for (i <- 0 until array.length){
if(i==0){
val lineArray = array(i).trim.split("\\|")
lockMapList = lockMapList :+ Map("id"->lineArray(0).trim,"name"->lineArray(1).trim,"pass"->lineArray(2).trim)
}else{
val lineArray = array(i).split(",")
if(lineArray.length==3){
lockMapList = lockMapList :+ Map("id"->lineArray(0).trim,"name"->lineArray(1).trim,"pass"->lineArray(2).trim)
}else if(lineArray.length==2){
val pass = keyMap.getOrElse(lineArray(0).trim,lineArray(1).trim)
lockMapList = lockMapList :+ Map("id"->lineArray(0).trim,"name"->lineArray(1).trim,"pass"->pass.trim)
}else if(lineArray.length==1){
lockMapList = lockMapList :+ Map("id"->lineArray(0).trim,"name"->"","pass"->"")
}else{
lockMapList = lockMapList :+ Map("id"->"-","name"->"","pass"->"")
}
}
//println(array(i))
}
lockMapList
// 跳跃遍历Array / ArrayBuffer
/*for(i <- 0 until (array.length, 2))
println(array(i))*/
// 从尾部遍历Array / ArrayBuffer
/*for(i <- (0 until array.length).reverse)
println(array(i))*/
// 使用“增强for循环”遍历Array / ArrayBuffer
/*for (e <- array){
println(e)
e.split(",").mkString
}*/
}
def KeyFileUtil(array:Array[String]) = {
var keyMapList = Map[String, String]()
for (i <- 0 until array.length) {
//println(array(i))
val lineArray = array(i).trim.split(",")
//println(lineArray.size)
if(lineArray.size==2){
keyMapList = keyMapList ++ Map(lineArray(0).trim -> lineArray(1).trim)
}else if(lineArray.size==1){
keyMapList = keyMapList ++ Map(lineArray(0).trim -> "")
}else{
keyMapList = keyMapList ++ Map("-" -> "")
}
}
keyMapList
}
def isEmpty(s: String): Boolean = (s == null) || (s.size==0)
}
package txt
import scala.reflect.io.File
object App {
def main(args: Array[String]): Unit = {
val key = ReadTxt.readFromTxtByLine("D:"+File.separator+"workspace"+File.separator+"source.txt")
//println(key.mkString)
val keyMap = ReadTxt.KeyFileUtil(key)
//println(keyMap)
val lack = ReadTxt.readFromTxtByLine("D:"+File.separator+"workspace"+File.separator+"source1.txt")
val lockMapList = ReadTxt.LackingFileUtil(lack,keyMap)
println(lockMapList)
}
}
来源:https://blog.csdn.net/qq_29777207/article/details/81873511


猜你喜欢
- 近期由于负责项目的一个模块,该模块下有很多分类,每个分类都有一个编码code,这个值是作为一个参数携带过来的。但是每个code确实对应一个方
- 由于公司项目的需求,需要绘制一条竖直的间断线作为分割线。这个可坑了爹了,以前只搞过水平的间断线,只要通过shape也可以简单的画出来,但是千
- 一、ORMO:object 对象R:Realtion 关系(关系型数据库)M:Mapping 映射ORM:对象关系型映射目前流行的编程语言,
- 一、分析这篇将会讲解撤销反撤销功能的实现,先讨论一下这个原理是怎么样实现的。每次撤回的内容,内容是怎么定义呢? 其实就是每一笔,每一笔作为撤
- 最近项目中使用了mybatis-plus 3.1.1版本,发现使用lambda表达式方式的条件构造器,执行时会报错;但是我用单元测试却通过,
- 目录通过Resource接口手动加载通过@Value自动转换通过ResourceLoader加载使用ResourceUtils加载资源读取资
- 一、前言高效、合理的使用hibernate-validator校验框架可以提高程序的可读性,以及减少不必要的代码逻辑。接下来会介绍一下常用一
- 这篇文章主要介绍了Java如何把数组转换为ArrayList,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需
- 异常方法//返回此可抛出对象的详细信息消息字符串public String getMessage() //将此可抛发对象及其回溯到标准错误流
- Android API Demos中有很多非常Nice的例子,这些例子的代码都写的很出色,如果大家把API Demos中的每个例子研究透了,
- 我想到使用Redis的订阅发布模式是用来解决推送问题的~。对于概念性的叙述,多多少少还是要提一下的:什么是Redis发布订阅?Redis发布
- 前言对于页面携带的请求头中的AcceptSpringBoot有对应的10种MessageConvert可以支持写出对应的媒体类型,比如app
- 工厂方法模式的定义工厂方法(Factory Method)模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂
- 自定义Repository接口要定义一个repository接口,你首先需要自定义一个实体类专用的Repository接口。该接口必须扩展
- 接着上篇文章,我们继续来学习 Java 中的字节流操作。装饰者缓冲流 BufferedInput/OutputStream装饰者流其实是基于
- 什么是 terms set 查询?Terms set 查询根据匹配给定字段的精确术语的最少数量返回文档。terms set 查询与 term
- 代理模式的应用:远程代理,为一个对象在不同的地址空间提供局部代表,可以隐藏一个对象存在于不同地质空间的事实。虚拟代理,根据需要创建开销很大的
- 前言在上一篇通知服务NotificationListenerService使用方法 中,我们已经介绍了如何使用NotificationLis
- 在上一篇文章中,我们学习了Camera的基本用法,并借助它们编写了一个例子,实现了类似于API Demos里的图片中轴旋转功能。不过那个例子
- 要求:1、输入手机号,点击发送后随机生成6位数字码,2分钟有效2、输入验证码,点击验证,返回成功或失败3、每个手机号每天只能输入3次代码如下