读取文件数据
在Scala语言的 Source单例对象中 中, 提供了一些非常便捷的方法, 从而使开发者可以快速的从指定数据源(文本文
件, URL地址等)中获取数据, 在使用 Source单例对象 之前, 需要先导包, 即 import scala.io.Source .
按行读取
概述
我们可以以 行 为单位, 来读取数据源中的数据, 返回值是一个 迭代器类型的对象 . 然后通过 toArray, toList 方 法, 将这些数据放到数组或者列表中即可.
格式
//1. 获取数据源文件对象.
val source:BufferedSource = Source.fromFile("数据源文件的路径","编码表")
//2. 以行为单位读取数据.
val lines:Iterator[String] = source.getLines()
//3. 将读取到的数据封装到列表中.
val list1:List[String] = lines.toList
//4. 千万别忘记关闭Source对象.
source.close()
案例
按行读取user.txt文件
import scala.io.{BufferedSource, Source}
object 读取 {
def main(args: Array[String]): Unit = {
//1. 获取数据源对象.
val source: BufferedSource = Source.fromFile("user.txt")
//2.通过getLines()方法, 逐行获取文件中的数据.
val lines = source.getLines()
//3. 将获取到的每一条数据都封装到列表中.
val list = lines.toList
list.foreach(println)
}
}
按字符读取
概述
Scala还提供了 以字符为单位读取数据 这种方式, 这种用法类似于迭代器, 读取数据之后, 我们可以通过 hasNext(), next()方法 , 灵活的获取数据.代码片
格式
//1. 获取数据源文件对象.
val source:BufferedSource = Source.fromFile("数据源文件的路径","编码表")
//2. 以字符为单位读取数据.
val iter:BufferedIterator[Char] = source.buffered
//3. 将读取到的数据封装到列表中.
while(iter.hasNext) {
print(iter.next())
}
//4. 千万别忘记关闭Source对象.
source.close()
注:
如果文件不是很大,我们可以直接把它读到一个字符串中
var str:String = source.mkString
案例
- 在当前项目下创建1.txt文本文件, 文件内容如下:
好好学习, 天天向上!
Hadoop, Zookeeper, Flume, Spark
Flink, Sqoop, HBase
选择黑马, 成就你一生的梦想.
- 以行为单位读取该文本文件中的数据, 并打印结果.
object 按字符读取 {
def main(args: Array[String]): Unit = {
//1. 获取数据源对象.
val source = Source.fromFile("1.txt")
//2. 获取数据源文件中的每一个字符.
val iter = source.buffered
//这里, source对象的用法相当于迭代器.
// 3. 通过hasNext(), next()方法获取数据.
while(iter.hasNext) {
print(iter.next()) //细节, 这里不要用println(), 否则输出结果可能不是你想要的.
}
//4. 通过mkString方法, 直接把文件中的所有数据封装到一个字符串中.
val str = source.mkString
//5. 打印结果.
println(str)
//6. 关闭source对象, 节约资源, 提高效率.
source.close()
}
}
写入数据
概述
Scala并没有内建的对写入文件的支持, 要写入数据到文件, 还是需要使用Java的类库.
往文件中写入数据
需求
往项目下的3.txt文本文件中, 编写一句话, 内容如下:
好好学习,
天天向上!
代码
object 写入 {
def main(args: Array[String]): Unit = {
val fileOutputStream = new FileOutputStream("3.txt")
fileOutputStream.write("好好学习,\r\n".getBytes)
fileOutputStream.write("天天向上".getBytes)
fileOutputStream.close()
}
}
版权声明:本文为zh2475855601原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。