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(",")) |