Scala的文件读写操作与正则表达式
在本篇博客中你将会学习并了解常用的文件处理任务,例如读取文件的一行文本,本博客的要点包含:
- Source.fromFile(...).getLines.toArray 输出文件所有行
- Source.fromFile(...).mkString 以字符串形式输出文件内容
- 将字符串转换为数字,可以使用toInt或toDouble方法
- 使用java的PrintWriter写入文本文件
- “正则”.r是一个Regex对象
- 若你的正则表达式包含反斜杠或者引号,请用"""..."""
- 正则模式包含分组,可以使用for(regex(变量1...,变量2)<- 字符串)
本篇博客要点如下:
读取行
// 读取文件所有的行,可以调用scala.io.Source对象的getLines方法:
val source = Source.fromFile("a.txt","utf-8")
val lineIterator = source.getLines
结果是迭代器可以使用for循环处理这些行
for(i <- lineIterator) println(i)
也可以使用迭代器应用toArray或toBuffer方法,将这些行放到数组力或者数组缓冲行中,若想将读取的的文件作为一个字符串,只需val conents = source.mkString
下面是简单的代码实例:读取桌面上的a.txt
object ReadFile {
def main(args: Array[String]): Unit = {
val read = new ReadFile()
val resource: String = "C:\\Users\\DonnieGao\\Desktop\\a.txt"
val encode = "UTF-8"
read.readFile(resource, encode)
println(read.readFileToStr(resource, encode))
}
}
class ReadFile {
/**
* 一行行读取文件的内容
*
* @param resource 文件路径
* @param code 文件编码格式
*/
def readFile(resource: String, code: String): Unit = {
var source: BufferedSource = null
try {
// 获取文件的Source对象,第一个参数是文件的路径,第二个文件的编码格式
source = Source.fromFile(resource, code)
val lineIterator = source.getLines()
while (true) {
if (lineIterator.hasNext) {
println(lineIterator.next())
} else {
return
}
}
} finally {
// 释放资源
source.close()
}
}
/**
* 将文本文件所有内容作为字符串
*
* @param resource 文件路径
* @param code 文件编码格式
* @return
*/
def readFileToStr(resource: String, code: String): String = {
// 获取文件的Source对象,第一个参数是文件的路径,第二个文件的编码格式
var source: BufferedSource = null
try {
source = Source.fromFile(resource, code)
source.mkString
} finally {
source.close()
}
}
}
读取字符
要将文件中读取单个字符,可以把Source对象当作迭代器,若仅仅只是想查看字符可以调用Source对象的buffered方法。
读取词法单元和数字
读取源文件中所有空格隔开的词法单元
val tokens = source.mkString.split("\\s+")
若有个基本都是浮点型的文件,可以将其读取到数组中:
val numbers = for (w <- tokens) yield w.toDouble 或者也可
val numbers = token.map(_.toDouble)
读取二进制文件
Scala并没有提供读取二进制文件的方法,可以使用java读取二进制的方法,代码示例
val file = new File(fileName)
val in = new FileInputStream(file)
val bytes = new Array[Byte](file.length.toInt)
in.read(bytes)
in.close()
写入文本文件
Scala没有内建对写入文件的支持,可借助java进行文件写入操作例如使用java.io.PrintWriter
/**
* Scala写入文借助java的PrintWriter
*/
def write(): Unit = {
val out = new PrintWriter("C:\\Users\\DonnieGao\\Desktop\\test.txt")
for (i <- 0 to 100) out.println(i)
out.close()
}
访问文件目录
Scala中没有直接访问某个目录下的所有文件的方式或者递归遍历有目录的类
/**
* 使用java列举下所有的文件夹
* @param dir 文件目录路径
*/
def dir(dir:String) = {
val dirFile = new File(dir)
val arrayFile= dirFile.listFiles()
for (i <- arrayFile){println(arrayFile.toBuffer)}
}
序列化
在java中声明一个可以被序列号的类通常是下面这种:
public class Person implements java.io.Serializable {
private static final long serialVersionUID = 4436475322569107137L;
}
Scala中声明一个可以被序列化的类通常是下面这种:
@SerialVersionUID(12356L) class ReadFile extends Serializable {
}
正则表达式
Scala中提供了正则操作处理scala.util.matching.Regex让这件事情可以变得简单。构造一个Regex对象,用String类的r方法即可
object RegexDemo {
def main(args: Array[String]): Unit = {
// 初始化正则对象
val numPattern = "[0-9]+".r
val regex = "13 welcome to beijing"
// findAllIn方法返回遍历所有匹配的迭代器,可以在for循环中使用
for (matchString <- numPattern.findAllIn(regex)) {
println(matchString)
}
// 查询字符串首个匹配项
println(numPattern.findFirstIn(regex))
// 检查某个字符串的开始部分能匹配,可以使用findPrefixOf
println(numPattern.findPrefixOf(regex))
}
Scala的文件读写操作与正则表达式的更多相关文章
- c语言文件读写操作总结
C语言文件读写操作总结 C语言文件操作 一.标准文件的读写 1.文件的打开 fopen() 文件的打开操作表示将给用户指定的文件在内存分配一个FILE结构区,并将该结构的指针返回给用户程序,以后用户程 ...
- [转]Android - 文件读写操作 总结
转自:http://blog.csdn.net/ztp800201/article/details/7322110 Android - 文件读写操作 总结 分类: Android2012-03-05 ...
- PHP文件读写操作之文件写入代码
在PHP网站开发中,存储数据通常有两种方式,一种以文本文件方式存储,比如txt文件,一种是以数据库方式存储,比如Mysql,相对于数据库存储,文件存储并没有什么优势,但是文件读写操作在基本的PHP开发 ...
- Java 字节流实现文件读写操作(InputStream-OutputStream)
Java 字节流实现文件读写操作(InputStream-OutputStream) 备注:字节流比字符流底层,但是效率底下. 字符流地址:http://pengyan5945.iteye.com/b ...
- Java 字符流实现文件读写操作(FileReader-FileWriter)
Java 字符流实现文件读写操作(FileReader-FileWriter) 备注:字符流效率高,但是没有字节流底层 字节流地址:http://pengyan5945.iteye.com/blog/ ...
- python(三)一个文件读写操作的小程序
我们要实现一个文件读写操作的小程序 首先我们有一个文件 我们要以"============"为界限,每一个角色分割成一个独立的txt文件,按照分割线走的话是分成 xiaoNa_1. ...
- 实现动态的XML文件读写操作
实现动态的XML文件读写操作(依然带干货) 前言 最近由于项目需求,需要读写操作XML文件,并且存储的XML文件格式会随着导入的数据不同而随时改变(当然导入的数据还是有一定约束的),这样我们要预先定义 ...
- ios 简单的plist文件读写操作(Document和NSUserDefaults)
最近遇到ios上文件读写操作的有关知识,记录下来,以便以后查阅,同时分享与大家. 一,简单介绍一下常用的plist文件. 全名是:Property List,属性列表文件,它是一种用来存储串行化后的对 ...
- java文件读写操作类
借鉴了项目以前的文件写入功能,实现了对文件读写操作的封装 仅仅需要在读写方法传入路径即可(可以是绝对或相对路径) 以后使用时,可以在此基础上改进,比如: 写操作: 1,对java GUI中文本框中的内 ...
随机推荐
- Eigen学习笔记2-Matrix类
在Eigen中,所有的矩阵Matrix和向量Vector都是由Matrix类构造的.向量只不过是矩阵的特殊形式,只有一列(列向量)或者一行. Matrix模板类有6个参数,其中前三个参数是必须的.前三 ...
- Python成员运算符
Python成员运算符 其他语言没有,是否包含运算符,主要应用在字符串或者集合中 测试实例中包含了一系列的成员,包括字符串,列表或元组. #使用场景01:字符串是否包含另外一个字符串? str01 = ...
- ZT 复杂的函数指针例子分析 2008
复杂的函数指针例子分析 2008-01-26 11:38:22 分类: 一个最简单的函数指针定义如下: Void (*funcPtr) (); //funcptr是一个函数指针,它指向的函数没有参数 ...
- CentOS7 防火墙(firewall)的操作命令
CentOS7 防火墙(firewall)的操作命令 安装:yum install firewalld 1.firewalld的基本使用 启动: systemctl start firewalld 查 ...
- TCP socket和web socket的区别
小编先习惯性的看了下某中文百科网站对Web Socket的介绍,觉得很囧.如果大家按照这个答案去参加BAT等互联网公司的前端开发面试,估计会被鄙视. 还是让我们阅读一些英文材料吧. 让我们直接看sta ...
- multi_index_container
转自:https://blog.csdn.net/buptman1/article/details/38657807 multi_index_container: Boost Multi-index ...
- C# 页面调用控制台应用程序
var rootPath = System.Configuration.ConfigurationManager.AppSettings["rootPath"]; Process. ...
- 基于easyui开发Web版Activiti流程定制器详解(六)——Draw2d详解(二)
回顾: 上一篇我们介绍了Draw2d整体结构,展示了组件类关系图,其中比较重要的类有Node.Canvas.Command.Port.Connection等,这篇将进一步介绍Draw2d如何使用以及如 ...
- Zookeeper ZAB 协议分析[转]
写在开始:这是我找到一篇比较好的博客,转载到这来进行备份原文参考: Zookeeper ZAB 协议分析 前言 ZAB 协议是为分布式协调服务 ZooKeeper 专门设计的一种支持崩溃恢复的原子广播 ...
- 【洛谷】【扩欧】P1516 青蛙的约会
[题目描述] 两只青蛙在网上相识了,它们聊得很开心,于是觉得很有必要见一面.它们很高兴地发现它们住在同一条纬度线上,于是它们约定各自朝西跳,直到碰面为止.可是它们出发之前忘记了一件很重要的事情,既没有 ...