美文网首页
Scala文件操作详解

Scala文件操作详解

作者: SunnyMore | 来源:发表于2018-07-18 13:38 被阅读392次

遍历一个文件中的每一行

必须导入scala.io.Source类: import scala.io.Source

  • 方法一: 使用Source.getLines返回的迭代器
val source = Source.fromFile("C://Users//Administrator//Desktop//test.txt", "UTF-8")
val lineIterator = source.getLines
for (line <- lineIterator) println(line)
  • 方法二: 将Source.getLines返回的迭代器,转换成数组

这里说明一点: 一个BufferedSource对象的getLines方法,只能调用一次,一次调用完之后,遍历了迭代器里所有的内容,就已经把文件里的内容读取完了
如果反复调用source.getLines,是获取不到内容的
此时,必须重新创建一个BufferedSource对象

val source = Source.fromFile("C://Users//Administrator//Desktop//test.txt", "UTF-8")
val lines = source.getLines.toArray
for(line <- lines) println(line)
  • 方法三: 调用Source.mkString,返回文本中所有的内容
val source = Source.fromFile("C://Users//Administrator//Desktop//test.txt", "UTF-8")
val lines = source.mkString

使用完BufferedSource对象之后,调用BufferedSource.close方法,关闭IO流资源


遍历一个文件中的每一个字符

BufferedSource,也实现了一个Iterator[Char]的这么一个trait

val source = Source.fromFile("C://Users//Administrator//Desktop//test.txt", "UTF-8")
for(c <- source) print(c)

从URL以及字符串中读取字符

val source = Source.fromURL("http://www.baidu.com", "UTF-8")
val source = Source.fromString("Hello World")

结合Java IO流,读取任意文件

spark的源码是由scala和java共同编写而成的,Java的多线程
scala,本身的编程语言的功能,就不是特别的强大和完善,比如说,scala甚至不能很方便地写文件,必须依赖于java的io流才可以

所以说,scala,其实主要就是针对某些特定领域的一些复杂系统的,比较适用的一种编程语言而已
完全无法替代java的,scala和java是相辅相成,荣辱与共的这么一种,共生关系

案例: 结合java IO流,做一个文件拷贝的案例

import java.io._

val fis = new FileInputStream(new File("C://Users//Administrator//Desktop//test.txt"))
val fos = new FileOutputStream(new File("C://Users//Administrator//Desktop//test3.txt"))

val buf = new Array[Byte](1024)
fis.read(buf)
fos.write(buf, 0, 1024)

fis.close()
fos.close()

结合Java IO流,写文件

val pw = new PrintWriter("C://Users//Administrator//Desktop//test4.txt")
pw.println("Hello World")
pw.close()

递归遍历子目录

def getSubdirIterator(dir: File): Iterator[File] = {
  val childDirs = dir.listFiles.filter(_.isDirectory)
  childDirs.toIterator ++ childDirs.toIterator.flatMap(getSubdirIterator _)
}

val iterator = getSubdirIterator(new File("C://Users//Administrator//Desktop"))

for(d <- iterator) println(d)

序列化以及反序列化(Java序列化和反序列化机制)

如果要序列化,那么就必须让类,有一个@SerialVersionUID,定义一个版本号
要让类继承一个Serializable trait

@SerialVersionUID(42L) class Person(val name: String) extends Serializable
val leo = new Person("leo")

import java.io._

val oos = new ObjectOutputStream(new FileOutputStream("C://Users//Administrator//Desktop//test.obj"))
oos.writeObject(leo)
oos.close()

val ois = new ObjectInputStream(new FileInputStream("C://Users//Administrator//Desktop//test.obj"))
val restoredLeo = ois.readObject().asInstanceOf[Person]
restoredLeo.name

相关文章

  • Scala文件操作详解

    遍历一个文件中的每一行 必须导入scala.io.Source类: import scala.io.Source ...

  • Scala编程基础29:Scala读写操作

    Scala进行文件读写操作,都是直接调用的Java中的IO类:java.io.File。 1.Scala写文件 下...

  • #转#Scala编程进阶:文件操作实战详解

    遍历一个文件中的每一行 方法一: 使用Source.getLines返回的迭代器 方法二: 将Source.get...

  • 保存配置

    MFC 操作配置文件INI的方法 VC++/MFC操作ini配置文件详解

  • 文件读写总结

    1. C++文件读写详解 1.1. 文件读写操作 使用方式 1.1.1. 打开文件 文件操作通过成员函数open(...

  • Scala操作HDFS

    通过Scala对HDFS的一些操作,包括创建目录,删除目录,上传文件,文件读取,删除文件,Append文件等等; ...

  • Scala操作HDFS

    通过Scala对HDFS的一些操作,包括创建目录,删除目录,上传文件,文件读取,删除文件,Append文件等等; ...

  • c++文件操作详解

    c++文件操作详解 C++ 通过以下几个类支持文件的输入输出: ofstream: 写操作(输出)的文件类 (由o...

  • Scala文件的读写操作

  • ubuntu 文件管理命令

    目录管理命令 文件操作命令 文件属性查看以及详解 d :目录(其他的字符有,-普通文件、l:链接文件、b:设备文件...

网友评论

      本文标题:Scala文件操作详解

      本文链接:https://www.haomeiwen.com/subject/tiqopftx.html