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)


  }
}

推荐一个公众号

号主为一线大厂架构师,CSDN博客专家,博客访问量突破一千万。主要分享Java、golang架构,源码,分布式,高并发等技术,用大厂程序员的视角来探讨技术进阶、面试指南、职业规划等。15W技术人的选择!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张音乐

请我喝杯咖啡吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值