scala 文件读写

32 阅读1分钟
package score

import java.io.FileWriter

/*
*任务:
* 1.读入根目录下的score.txt文件
*   使用getLines以行为单位读取内容
*
* 2.计算
*   (1)每个同学的总分
*   (2)平均分
*
* 3.将计算的结果写入到score_result.txt文件中
*
 */
object score01 {
  
  case class Stu(name:String,yuwen:Double,shuxue:Double,yingyu:Double)
  
  def main(args: Array[String]): Unit = {
    
    //定义一个可变的List
    val stuList = scala.collection.mutable.ListBuffer[Stu]()
    //1.读入文件
    val lines = scala.io.Source.fromFile("score.txt").getLines()
    //跳过第一行:表头
    lines.next()

    while (lines.hasNext){
      val line = lines.next()
      val list = line.split(",")
      
      stuList += Stu(list(0),list(1).toDouble,list(2).toDouble,list(3).toDouble)
    }
    // 读职信息结束
    // 3. 写入一个新的文件
    val filewriter = new FileWriter("score_result.txt")
    stuList.foreach(stu => {
      val total = stu.yuwen + stu.shuxue + stu.yingyu
      filewriter.write(s"${stu.name}, 总分: ${total}, 平均分: ${total/3}\n")
      println(s"${stu.name}写入成功")
    })
    // 计算单科最高分
    filewriter.write("最高分\n")
    val yuwen_max = stuList.map(_.yuwen).max
    filewriter.write(s"语文:${yuwen_max}\n")
    filewriter.write(s"${stuList.filter(_.yuwen == yuwen_max).map(_.name).mkString(" ")} \n")
    // 查找
    filewriter.write(s"数学:${stuList.map(_.shuxue).max} \n")

    filewriter.write(s"英语:${stuList.map(_.yingyu).max} \n")

    filewriter.close()
  }
}