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