1.读取行
要读取文件中的所有行,可以调用scala.io.Source对象的getLines方法。
importscala.io.Source //第一个参数可以是java.io.File,或者String。 valsource=Source.fromFile("D:/V-learning/Java/Scala/developingFiles/readFiles.txt","UTF-8") //返回一个迭代器 valiter=source.getLines() for(v<-iter)println(v) //用完source对象后,需要关闭。 source.close()
getLines()返回结果是一个迭代器,可以逐行处理这些行,或者可以使用迭代器的toArray,或者toBuffer方法,将其转换为数组或数组缓冲。另外,source对象使用后需要关闭。
下面例子,也可以直接使用mkString方法,直接将整个文件转化为一个字符串:
valiterable=Source.fromFile("D:/V-learning/Java/Scala/developingFiles/readFiles.txt").getLines() println(iterable.mkString("||"))
2.读取字符
首先,通过API查看Source对象的定义:
abstractclassSourceextendsIterator[Char]withCloseable
source是一个抽象类,继承Iterator[Char]类。可以直接把Source当做迭代器。
如果想查看某个字符,但是不想处理掉它的话,可以使用使用source对象的buffered方法,然后使用head方法查看下一个字符。
//统计文件中有多少个t字符 valsource1=Source.fromFile("D:/V-learning/Java/Scala/developingFiles/readFiles.txt","UTF-8") valbuffered_charater_source1=source1.buffered varcharacter_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)。读取这些数字,从命令行输入一个因子, *然后将这些数字乘以这个因子,将这些数字逗号分隔输出,并计算总和。 */ valsource2=Source.fromFile("D:/test/develop/nums.txt","UTF-8") valnums_source=source2.getLines().mkString.split("\\s+") println("请输入乘数因子:") importscala.io.StdIn valvetor=StdIn.readInt() valnums_output=nums_source.map{_.toDouble*vetor} //valnums_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.读取其他格式(数据源)文件:
除了从文本文件读取内容,还可以从“网址”、“字符串”、“标准输入”和“二进制文件”等渠道读取文件内容。