文件和正則表達式

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類。



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