Scala基础:掌握Source读取数据、写入数据的功能

本文详细介绍了Scala中使用Source对象进行文件操作的方法,包括按行、按字符、按词法单元读取文本文件,从URL读取数据,以及读取二进制文件。同时,文章涵盖了如何写入文件,序列化和反序列化对象,以及一个实际案例——根据学生成绩进行排序和写入的新文件操作。
摘要由CSDN通过智能技术生成

一、读取数据

在Scala语言的 Source单例对象中 中, 提供了一些非常便捷的方法, 从而使开发者可以快速的从指定数据源(文本文 件, URL地址等)中获取数据, 在使用 Source单例对象 之前, 需要先导包, 即 import scala.io.Source .

1.1 按行读取

我们可以以 行 为单位, 来读取数据源中的数据, 返回值是一个 迭代器类型的对象 . 然后通过 toArray, toList 方 法, 将这些数据放到数组或者列表中即可.

注意: Source类扩展自Iterator[Char]

格式

 需求

1. 在当前项目下创建 data 文件夹 , 并在其中创建 1.txt 文本文件 , 文件内容如下 :

 2. 以行为单位读取该文本文件中的数据, 并打印结果

参考代码

 

1.2 按字符读取

Scala 还提供了 以字符为单位读取数据 这种方式 , 这种用法类似于迭代器 , 读取数据之后 , 我们可以通过 hasNext(), next() 方法 , 灵活的获取数据
格式

 

需求
1. 在当前项目下创建 data 文件夹 , 并在其中创建 1.txt 文本文件 , 文件内容如下 :

2. 以行为单位读取该文本文件中的数据, 并打印结果

参考代码

 

1.3 读取词法单元和数字

所谓的词法单元指的是 以特定符号间隔开的字符串 , 如果数据源文件中的数据都是 数字形式的字符串 , 我们可以很方便的从文件中直接获取这些数据 , 例如 :

格式

 

需求
在当前项目下创建 data 文件夹 , 并在其中创建 2.txt 文本文件 , 文件内容如下 :
2. 读取文件中的所有整数 , 将其加 1 , 把结果打印到控制台.
参考代码

1.4 URL或者其他源读取数据

Scala 中提供了一种方式 , 可以让我们直接从指定的 URL 路径 , 或者其他源 ( 例如 : 特定的字符串 )中直接读取数据。
格式
需求
1. 读取 传智播客官网 (http://www.itcast.cn) 页面的数据 , 并打印结果 .
2. 直接读取字符串 黑马程序员 , 并打印结果 .
参考代码

1.5 读取二进制文件

Scala 没有提供读取二进制文件的方法 , 我们需要通过 Java 类库来实现 .
需求
已知项目的 data 文件夹下有 05.png 这张图片 , 请读取该图片数据 , 并将读取到的字节数打印到控制台上 .
参考代码

二、写入数据

Scala 并没有内建的对写入文件的支持 , 要写入数据到文件 , 还是需要使用 Java 的类库 .

2.1 往文件中写入指定数据

需求
项目下的 data 文件夹的 3.txt 文本文件中 , 编写一句话 , 内容如下

参考代码

 

2.2 序列化和反序列化

Scala , 如果想将对象传输到其他虚拟机 , 或者临时存储 , 就可以通过 序列化和反序列化 来实现了 .
序列化 : 把对象写到文件中的过程 .
反序列化 : 从文件中加载对象的过程 .
注意 : 一个类的对象要想实现序列化和反序列化操作 , 则该类必须继承 Serializable 特质 .
需求 :
1. 定义样例类 Person, 属性为姓名和年龄 .
2. 创建 Person 样例类的对象 p.
3. 通过序列化操作将对象 p 写入到项目下的 data 文件夹下的 4.txt 文本文件中 .
4. 通过反序列化操作从项目下的 data 文件夹下的 4.txt 文件中 , 读取对象 p.

 参考代码

三、案例: 学员成绩表

3.1 概述

1. 已知项目下的 data 文件夹的 student.txt 文本文件中 , 记录了一些学员的成绩 , 如下 :
格式为 : 姓名 语文成绩 数学成绩 英语成绩
2. 按照学员的总成绩降序排列后 , 按照 姓名 语文成绩 数学成绩 英语成绩 总成绩 的格式 , 将数据写到项目下的 data 文件夹的 stu.txt 文件中

7.2 目的

考察 , 样例类 , 以及函数式编程 相关内容 .

7.3 步骤

1. 定义样例类 Person, 属性为 : 姓名 , 语文成绩 , 数学成绩 , 英语成绩 , 且该类中有一个获取总成绩的方法 .
2. 读取指定文件 (./data/student.txt) 中所有的数据 , 并将其封装到 List 列表中 .
3. 定义可变的列表 ListBuffffer[Student], 用来记录所有学生的信息 .
4. 遍历第二步获取到的数据 , 将其封装成 Person 类的对象后 , 并添加到 ListBuffffer .
5. 对第 4 步获取到的数据进行排序操作 , 并将其转换成 List 列表 .
6. 按照指定格式 , 通过 BufffferWriter 将排序后的数据写入到目的地文件中 (./data/stu.txt)
7. 关闭流对象.

7.4 参考代码

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值