Scala的文件读写

43 阅读2分钟

一. 任务分析

  1. 把文字内容从.txt文件中读到内存中。
  2. 写程序分析数据。
  3. 把结果写入.txt文件。

二.从文件中读出内容

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

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

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

作用:读入一个文件

步骤:

image.png 文本文件要放在根目录,不要放在src里面

代码如下:

kotlin

package words

object words01 {
  def main(args: Array[String]): Unit = {
    // 1.读入paper.txt的内容,大大的长长的字符串
    //  Source.formFile().mkString
    // 2.对字符串进行拆分 把句子变成一个一个单词



    val obj=scala.io.Source.fromFile("test.txt")
    println(obj)

    val content = "I ilke scala"
    // 对字符串进行拆分
    val rst = content.split(' ')
    // ["I","like","scala.”]
    rst.foreach(println)
  }
}

image.png 结果:

image.png

读取其他文件的内容,显示出来,并且分个字符以及将字符出现的字数写出在显示在一个新的文件
arduino
 
package words

import java.io.FileWriter

object words01 {
  def main(args: Array[String]): Unit = {
    // 1.读入paper.txt的内容,大大的长长的字符串
    //  Source.formFile().mkString
    // 2.对字符串进行拆分 把句子变成一个一个单词



    val content=scala.io.Source.fromFile("test.txt").mkString
    println(content)

    // 2.对字符串进行拆分:使用spilt 空格, 对这个长长的字符串做拆分,得到了一个数组,每个元素都是一个单词
    // w+ 正则表达式,w表示一个非字符(空格,符号,!,;;.....) +表示一个及以上
    // map把每个单词变小写
    val rst =content.split("\W+").map(ele=>ele.toLowerCase())

    // ["I","like","scala.”]
    // 投票,画正字

    // 3. 空的容器保存键值对数据: 键: 单词,值: 次数
    val map = scala.collection.mutable.Map[String, Int]()
    rst.foreach(word => {
      // 如果word在map中存在,就把值+1
      if(map.contains(word)){
        map(word) += 1
      }
      else { // 如果word在map中不存在,就把值设为1
        // map += word -> 1
        map(word) = 1
      }
    })

    // 4.排序
//    map.foreach(println)
    // 按照单词出现的频率,从高到底排序
    //map是无序的 不能做排序
    // list 是可以排序的
    val wordLists = map.toList.sortBy(_._2).reverse

    // 5. 把结果写到文件中

    val writer = new FileWriter("result.txt")
    wordLists.foreach(ele =>{
      writer.write(s"${ele._1}:${ele._2} \n")
    })
    writer.close()
  }
}

屏幕截图 2025-12-15 102452.png 文件读取结果显示·:

image.png