数码控科技猎奇Iphone动漫星座游戏电竞lolcosplay王者荣耀攻略allcnewsBLOGNEWSBLOGASKBLOGBLOGZSK全部技术问答问答技术问答it问答代码软件新闻开发博客电脑/网络手机/数码笔记本电脑互联网操作系统软件硬件编程开发360产品资源分享电脑知识文档中心IT全部全部分类全部分类技术牛文全部分类教程最新网页制作cms教程平面设计媒体动画操作系统网站运营网络安全服务器教程数据库工具网络安全软件教学vbscript正则表达式javascript批处理更多»编程更新教程更新游戏更新allitnewsJava新闻网络医疗信息化安全创业站长电商科技访谈域名会议专栏创业动态融资创投创业学院 / 产品经理创业公司人物访谈营销开发数据库服务器系统虚拟化云计算嵌入式移动开发作业作业1常见软件all电脑网络手机数码生活游戏体育运动明星影音休闲爱好文化艺术社会民生教育科学医疗健康金融管理情感社交地区其他电脑互联网软件硬件编程开发360相关产品手机平板其他电子产品摄影器材360硬件通讯智能设备购物时尚生活常识美容塑身服装服饰出行旅游交通汽车购房置业家居装修美食烹饪单机电脑游戏网页游戏电视游戏桌游棋牌游戏手机游戏小游戏掌机游戏客户端游戏集体游戏其他游戏体育赛事篮球足球其他运动球类运动赛车健身运动运动用品影视娱乐人物音乐动漫摄影摄像收藏宠物幽默搞笑起名花鸟鱼虫茶艺彩票星座占卜书画美术舞蹈小说图书器乐声乐小品相声戏剧戏曲手工艺品历史话题时事政治就业职场军事国防节日风俗法律法规宗教礼仪礼节自然灾害360维权社会人物升学入学人文社科外语资格考试公务员留学出国家庭教育学习方法语文物理生物工程学农业数学化学健康知识心理健康孕育早教内科外科妇产科儿科皮肤科五官科男科整形中医药品传染科其他疾病医院两性肿瘤科创业投资企业管理财务税务银行股票金融理财基金债券保险贸易商务文书国民经济爱情婚姻家庭烦恼北京上海重庆天津黑龙江吉林辽宁河北内蒙古山西陕西宁夏甘肃青海新疆西藏四川贵州云南河南湖北湖南山东江苏浙江安徽江西福建广东广西海南香港澳门台湾海外地区

Scala的文件读写操作与正则表达式

来源:脚本之家  责任编辑:小易  

目录

在本篇文章中你将会学习并了解常用的文件处理任务,例如读取文件的一行文本,本博客的要点包含:

1.Source.fromFile(...).getLines.toArray 输出文件所有行
2.Source.fromFile(...).mkString 以字符串形式输出文件内容
3.将字符串转换为数字,可以使用toInt或toDouble方法
4.使用java的PrintWriter写入文本文件
5.“正则”.r是一个Regex对象
6.若你的正则表达式包含反斜杠或者引号,请用"""..."""
7.正则模式包含分组,可以使用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的文件读写操作与正则表达式 ,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

您可能感兴趣的文章:


  • 本文相关:
  • 浅谈scala的class、object和apply()方法
  • php警告cannot use a scalar value as an array的解决方法
  • php下关于cannot use a scalar value as an array的解决办法
  • executereader(),executenonquery(),executescalar(),executexmlreader()之间的区别
  • notepad、editplus等软件常用的文本整理正则表达式
  • javascript正则表达式校验非零的正整数实例
  • js正则表达式获取字符串中特定字符的方法
  • 校验普通电话、传真号码的正则表达式(可以+开头,除数字外,可含
  • 正则表达式学习问答
  • js 匹配多个的email地址的代码
  • 检测八位数字是否为有效日期的正则
  • javascript 基于正则表达式的文本框验证代码
  • 正则表达式问号的四种用法详解
  • 常用正则表达式收集
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved