scala文件读写-全文单词统计

13 阅读1分钟

(一)任务分析

  1. 把文字内容从.txt文件中读到内存中。

  2. 写程序分析数据。

  3. 把结果写入.txt文件。

(二)从文件中读出内容

在scala中,涉及到文件读写的方法有很多,可以使用java.io下的工具包,也可以使用scala.io下的功能。

下面介绍source.fromFile这个方法。

格式:scala.io.Source.formFile(文件名)

作用:读入一个文件

package score

import java.io.FileWriter

/*
* 1.读入文件
* 2. 计算
*       (1)每个同学的总分
*       (2)每个同学的平均分
*       (3)每个科目的最高分
*       ....
*  3. 把结果写入到一个新文件中
*
 */
object score01 {

  case class Stu(name:String,yuwen:Double,shuxue:Double,yingyu:Double)

  def main(args: Array[String]): Unit = {
   //0 创建一个可变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 li = line.split(",")
      stuList += Stu(li(0), li(1).toDouble, li(2).toDouble, li(3).toDouble)
    }
    //读入数据结束
    println("读入数据结束")
    println("计算结束,开始写入")
    // 3. 保存结果
    val fileWriter = new FileWriter("score_result.txt")

    fileWriter.write("高三19班成绩单 \n");
    stuList.foreach(stu => {
      val total = stu.yuwen + stu.yingyu + stu.shuxue

      val avg = total / 3
      fileWriter.write(s"${stu.name},总分:${total} 平均分:${avg} \n")
    })
    //求单科最高分
    fileWriter.write(s"语文最高分:${stuList.map(_.yuwen).max} \n")
    fileWriter.write(s"数学最高分:${stuList.map(_.shuxue).max} \n")
    fileWriter.write(s"英语最高分:${stuList.map(_.yingyu).max} \n")
    fileWriter.close()
  }
}