Scala 檔案和正則表示式
阿新 • • 發佈:2018-12-23
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(","))