1. 程式人生 > >Scala 檔案和正則表示式

Scala 檔案和正則表示式

1. 讀取行

import scala.io.Source



object FileSyllabus {

  def main(args: Array[String]): Unit = {

    //檔案讀取

    val file1 = Source.fromFile("C:\\Users\\61661\\Desktop\\scala筆記.txt")

    val lines = file1.getLines

    for (line <- lines) {

      println(line)

    }

    file1.close

  }

}

尖叫提示:記得close

1)  檔案內容轉陣列:

val array= file1.getLines.toArray

2)  檔案內容轉字串:

val iterator = file1.mkString

 

2.讀取字元

由於Source.fromFile直接返回的就是Iterator[Char],所以可以直接對其進行迭代,按照字元訪問裡邊每一個元素。

Source.fromFile("C:\\Users\\61661\\Desktop\\scala筆記.txt", "UTF-8")

for(ch <- file2){

  println(ch)

}

file2.close

 

3.讀取詞法單元和數字

如果想將以某個字元或某個正則表示式分開的字元成組讀取,可以這麼做:

val file3 = Source.fromFile("D:\\BigData課堂筆記\\尚矽谷BigData筆記\\尚矽谷大資料技術之Scala\\2.資料\\info.csv")

val tokens = file3.mkString.split(",")

println(tokens.mkString(" "))

file3.close

 

4.讀取網路資源、檔案寫入、控制檯操作

1) 讀取網路資源

val webFile = Source.fromURL("http://www.baidu.com")

webFile.foreach(print)

webFile.close()

2)  寫入資料到檔案

import java.io.{File, PrintWriter}

val writer = new PrintWriter(new File("嘿嘿嘿.txt"))

for (i <- 1 to 100)

  writer.println(i)

writer.close()

3)  控制檯操作

//控制檯互動--老API

print("請輸入內容:")

val consoleLine1 = Console.readLine()

println("剛才輸入的內容是:" + consoleLine1)



//控制檯互動--新API

print("請輸入內容(新API):")

val consoleLine2 = StdIn.readLine()

println("剛才輸入的內容是:" + consoleLine2)

 

5.序列化

@SerialVersionUID(1L) class Person extends Serializable{

  override def toString = name + "," + age



  val name = "Nick"

  val age = 20



}



object PersonMain extends App{

  override def main(args: Array[String]): Unit = {



    import java.io.{FileOutputStream, FileInputStream, ObjectOutputStream, ObjectInputStream}

    val nick = new Person

    val out = new ObjectOutputStream(new FileOutputStream("Nick.obj"))

    out.writeObject(nick)

    out.close()



    val in = new ObjectInputStream(new FileInputStream("Nick.obj"))

    val saveNick = in.readObject()

    in.close()

    println(saveNick)

  }

}

 

6.程序控制

我們可以使用scala來操作shell,scala提供了scala.sys.process包提供了用於shell程式互動的工具。

1)  執行shell

import sys.process._

"ls -al /"!

"ls -al /"!!

    尖叫提示:!和!!的區別在於:process包中有一個將字串隱式轉換成ProcessBuild物件的功能,感嘆號就是執行這個物件,單感嘆號的意思就是程式執行成功返回0,執行失敗返回非0,如果雙感嘆號,則結果以字串的形式返回。

2)  管道符

import sys.process._

"ls -al /" #| "grep etc" !

3)  將shell的執行結果重定向到檔案

import sys.process._

"ls -al /" #| "grep etc" !;

"ls -al /" #>> new File("output.txt") !;

    尖叫提示:注意,每一個感嘆號後邊,有分號結束

    scala程序還可以提供:

    p #&& q操作,即p任務執行成功後,則執行q任務。

    p #|| q操作,即p任務執行不成功,則執行q任務。

    既然這麼強大,那麼crontab + scala + shell,就完全不需要使用oozie了。

 

7.正則表示式

    我們可以通過正則表示式匹配一個句子中所有符合匹配的內容,並輸出:

import scala.util.matching.Regex

val pattern1 = new Regex("(S|s)cala")

val pattern2 = "(S|s)cala".r

val str = "Scala is scalable and cool"

println((pattern2 findAllIn str).mkString(","))