Scala的文件讀寫操作與正則表達(dá)式
目錄
在本篇文章中你將會(huì)學(xué)習(xí)并了解常用的文件處理任務(wù),例如讀取文件的一行文本,本博客的要點(diǎn)包含:
1.Source.fromFile(...).getLines.toArray 輸出文件所有行
2.Source.fromFile(...).mkString 以字符串形式輸出文件內(nèi)容
3.將字符串轉(zhuǎn)換為數(shù)字,可以使用toInt或toDouble方法
4.使用java的PrintWriter寫入文本文件
5.“正則”.r是一個(gè)Regex對(duì)象
6.若你的正則表達(dá)式包含反斜杠或者引號(hào),請(qǐng)用"""..."""
7.正則模式包含分組,可以使用for(regex(變量1...,變量2)<- 字符串)
本篇文章要點(diǎn)如下:
讀取行
// 讀取文件所有的行,可以調(diào)用scala.io.Source對(duì)象的getLines方法:
val source = Source.fromFile("a.txt","utf-8")
val lineIterator = source.getLines
結(jié)果是迭代器可以使用for循環(huán)處理這些行
for(i <- lineIterator) println(i)
也可以使用迭代器應(yīng)用toArray或toBuffer方法,將這些行放到數(shù)組力或者數(shù)組緩沖行中,若想將讀取的的文件作為一個(gè)字符串,只需val conents = source.mkString
下面是簡(jiǎn)單的代碼實(shí)例:讀取桌面上的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 {
 /**
 * 一行行讀取文件的內(nèi)容
 *
 * @param resource 文件路徑
 * @param code  文件編碼格式
 */
 def readFile(resource: String, code: String): Unit = {
 var source: BufferedSource = null
 try {
  // 獲取文件的Source對(duì)象,第一個(gè)參數(shù)是文件的路徑,第二個(gè)文件的編碼格式
  source = Source.fromFile(resource, code)
  val lineIterator = source.getLines()
  while (true) {
  if (lineIterator.hasNext) {
   println(lineIterator.next())
  } else {
   return
  }
  }
 } finally {
  // 釋放資源
  source.close()
 }
 }
 /**
 * 將文本文件所有內(nèi)容作為字符串
 *
 * @param resource 文件路徑
 * @param code  文件編碼格式
 * @return
 */
 def readFileToStr(resource: String, code: String): String = {
 // 獲取文件的Source對(duì)象,第一個(gè)參數(shù)是文件的路徑,第二個(gè)文件的編碼格式
 var source: BufferedSource = null
 try {
  source = Source.fromFile(resource, code)
  source.mkString
 } finally {
  source.close()
 }
 }
}
讀取字符
要將文件中讀取單個(gè)字符,可以把Source對(duì)象當(dāng)作迭代器,若僅僅只是想查看字符可以調(diào)用Source對(duì)象的buffered方法。
讀取詞法單元和數(shù)字
讀取源文件中所有空格隔開的詞法單元
val tokens = source.mkString.split("\\s+")
若有個(gè)基本都是浮點(diǎn)型的文件,可以將其讀取到數(shù)組中:
val numbers = for (w <- tokens) yield w.toDouble 或者也可 val numbers = token.map(_.toDouble)
讀取二進(jìn)制文件
Scala并沒有提供讀取二進(jìn)制文件的方法,可以使用java讀取二進(jìn)制的方法,代碼示例
val file = new File(fileName) val in = new FileInputStream(file) val bytes = new Array[Byte](file.length.toInt) in.read(bytes) in.close()
寫入文本文件
Scala沒有內(nèi)建對(duì)寫入文件的支持,可借助java進(jìn)行文件寫入操作例如使用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中沒有直接訪問某個(gè)目錄下的所有文件的方式或者遞歸遍歷有目錄的類
 /**
 * 使用java列舉下所有的文件夾
 * @param dir 文件目錄路徑
 */
 def dir(dir:String) = {
 val dirFile = new File(dir)
 val arrayFile= dirFile.listFiles()
 for (i <- arrayFile){println(arrayFile.toBuffer)}
 }
序列化
在java中聲明一個(gè)可以被序列號(hào)的類通常是下面這種:
public class Person implements java.io.Serializable {
 private static final long serialVersionUID = 4436475322569107137L;
}
Scala中聲明一個(gè)可以被序列化的類通常是下面這種:
@SerialVersionUID(12356L) class ReadFile extends Serializable {
 
}
正則表達(dá)式
Scala中提供了正則操作處理scala.util.matching.Regex讓這件事情可以變得簡(jiǎn)單。構(gòu)造一個(gè)Regex對(duì)象,用String類的r方法即可
object RegexDemo {
 def main(args: Array[String]): Unit = {
 // 初始化正則對(duì)象
 val numPattern = "[0-9]+".r
 val regex = "13 welcome to beijing"
 // findAllIn方法返回遍歷所有匹配的迭代器,可以在for循環(huán)中使用
 for (matchString <- numPattern.findAllIn(regex)) {
  println(matchString)
 }
 // 查詢字符串首個(gè)匹配項(xiàng)
 println(numPattern.findFirstIn(regex))
 // 檢查某個(gè)字符串的開始部分能匹配,可以使用findPrefixOf
 println(numPattern.findPrefixOf(regex))
 }
總結(jié)
以上所述是小編給大家介紹的Scala的文件讀寫操作與正則表達(dá)式 ,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)我們網(wǎng)站的支持!
上一篇:詳解如何使用Spark和Scala分析Apache訪問日志
欄 目:Scala
下一篇:linux下搭建scala環(huán)境并寫個(gè)簡(jiǎn)單的scala程序
本文標(biāo)題:Scala的文件讀寫操作與正則表達(dá)式
本文地址:http://www.jygsgssxh.com/a1/Scala/11998.html
您可能感興趣的文章
- 01-11php下關(guān)于Cannot use a scalar value as an array的解決辦法
 - 01-11PHP警告Cannot use a scalar value as an array的解決方法
 - 01-11Windows7下安裝Scala 2.9.2教程
 - 01-11淺談Scala的Class、Object和Apply()方法
 - 01-11深入理解Scala函數(shù)式編程過程
 - 01-11Scala基礎(chǔ)簡(jiǎn)介及代碼示例
 - 01-11Scala安裝及環(huán)境圖文配置教程
 - 01-11利用Gradle如何構(gòu)建scala多模塊工程的步驟詳解
 - 01-11linux下搭建scala環(huán)境并寫個(gè)簡(jiǎn)單的scala程序
 - 01-11詳解如何使用Spark和Scala分析Apache訪問日志
 


閱讀排行
- 1C語言 while語句的用法詳解
 - 2java 實(shí)現(xiàn)簡(jiǎn)單圣誕樹的示例代碼(圣誕
 - 3利用C語言實(shí)現(xiàn)“百馬百擔(dān)”問題方法
 - 4C語言中計(jì)算正弦的相關(guān)函數(shù)總結(jié)
 - 5c語言計(jì)算三角形面積代碼
 - 6什么是 WSH(腳本宿主)的詳細(xì)解釋
 - 7C++ 中隨機(jī)函數(shù)random函數(shù)的使用方法
 - 8正則表達(dá)式匹配各種特殊字符
 - 9C語言十進(jìn)制轉(zhuǎn)二進(jìn)制代碼實(shí)例
 - 10C語言查找數(shù)組里數(shù)字重復(fù)次數(shù)的方法
 
本欄相關(guān)
- 01-11php下關(guān)于Cannot use a scalar value as an ar
 - 01-11PHP警告Cannot use a scalar value as an array的
 - 01-11Windows7下安裝Scala 2.9.2教程
 - 01-11淺談Scala的Class、Object和Apply()方法
 - 01-11深入理解Scala函數(shù)式編程過程
 - 01-11Scala基礎(chǔ)簡(jiǎn)介及代碼示例
 - 01-11Scala安裝及環(huán)境圖文配置教程
 - 01-11linux下搭建scala環(huán)境并寫個(gè)簡(jiǎn)單的sca
 - 01-11利用Gradle如何構(gòu)建scala多模塊工程的步
 - 01-11Scala的文件讀寫操作與正則表達(dá)式
 
隨機(jī)閱讀
- 08-05DEDE織夢(mèng)data目錄下的sessions文件夾有什
 - 01-10使用C語言求解撲克牌的順子及n個(gè)骰子
 - 01-11ajax實(shí)現(xiàn)頁面的局部加載
 - 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
 - 01-10delphi制作wav文件的方法
 - 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
 - 08-05織夢(mèng)dedecms什么時(shí)候用欄目交叉功能?
 - 08-05dedecms(織夢(mèng))副欄目數(shù)量限制代碼修改
 - 01-10C#中split用法實(shí)例總結(jié)
 - 04-02jquery與jsp,用jquery
 


