文件和正则表达式

1.读取行

要读取文件中的所有行,可以调用scala.io.Source对象的getLines方法。

import scala.io.Source

//第一个参数可以是java.io.File,或者String。
val source = Source.fromFile("D:/V-learning/Java/Scala/developingFiles/readFiles.txt", "UTF-8")
//返回一个迭代器
val iter = source.getLines()
for (v <- iter) println(v)
//用完source对象后,需要关闭。
source.close()

getLines()返回结果是一个迭代器,可以逐行处理这些行,或者可以使用迭代器的toArray,或者toBuffer方法,将其转换为数组或数组缓冲。另外,source对象使用后需要关闭。


下面例子,也可以直接使用mkString方法,直接将整个文件转化为一个字符串:

val iterable = Source.fromFile("D:/V-learning/Java/Scala/developingFiles/readFiles.txt").getLines()
println(iterable.mkString("||"))


2.读取字符

首先,通过API查看Source对象的定义:

abstract class Source extends Iterator[Char] with Closeable

source是一个抽象类,继承Iterator[Char]类。可以直接把Source当做迭代器。

如果想查看某个字符,但是不想处理掉它的话,可以使用使用source对象的buffered方法,然后使用head方法查看下一个字符。

//统计文件中有多少个t字符
val source1 = Source.fromFile("D:/V-learning/Java/Scala/developingFiles/readFiles.txt", "UTF-8")
val buffered_charater_source1 = source1.buffered
var character_count = 0
while (buffered_charater_source1.hasNext)
 {
   if (buffered_charater_source1.head == 't') {character_count +=1}
   buffered_charater_source1.next()
 }
println("t字符的个数是: " + character_count)
source1.close()


3.读取词法单元和数字:

这部分读取文件中以空格隔开的单词。如果需要将String转化为数值,可以使用toInt,或toDouble方法。下面程序也演示了如何从控制台读取输入。

/*
* 文件中存储以一个(或多个)空格分隔的数字(整数、Double)。读取这些数字,从命令行输入一个因子,
* 然后将这些数字乘以这个因子,将这些数字逗号分隔输出,并计算总和。
*/
val source2 = Source.fromFile("D:/test/develop/nums.txt", "UTF-8")
val nums_source = source2.getLines().mkString.split("\\s+")
    
println("请输入乘数因子:")
import scala.io.StdIn   
val vetor = StdIn.readInt()
val nums_output = nums_source.map { _.toDouble * vetor }
// val nums_output = for (w <- nums_source) yield { (w.toDouble)*vetor}
println("乘以乘数因子后的数组:" + nums_output.mkString(","))
source2.close()

scala中的String.split复用了Java中的String.split方法,详细说明可以参考下面的文章:

http://www.cnblogs.com/davidhaslanda/p/4050471.html


4.读取其他格式(数据源)文件:

除了从文本文件读取内容,还可以从“网址”、“字符串”、“标准输入”和“二进制文件”等渠道读取文件内容。

首先,需要介绍普通文本文件和二进制文件的区别:



Scala没有提供读取二进制文件的方法,需要使用Java类。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章