1. 读取行
import scala.io.Source
object Scala01_FileSyllabus {
def main(args: Array[String]): Unit = {
//文件读取
val file1 = Source.fromFile("/Users/luomingkui/Downloads/scala.txt")
val lines = file1.getLines
for (line <- lines) {
println(line)
}
file1.close
}
}
// 说明:
// 文件内容转数组:val array= file1.getLines.toArray
// 文件内容转字符串:val iterator = file1.mkString
2.读取字符
由于Source.fromFile直接返回的就是Iterator[Char],所以可以直接对其进行迭代,按照字符访问里边每一个元素。
import scala.io.Source
object Scala02_FromFile {
def main(args: Array[String]): Unit = {
val file2 = Source.fromFile("/Users/luomingkui/Downloads/scala.txt","UTF-8")
for(ch <- file2){
println(ch)
}
file2.close
}
}
3.读取词法单元和数字
如果想将以某个字符或某个正则表达式分开的字符成组读取,可以这么做。
object Scala03_FromFile {
def main(args: Array[String]): Unit = {
val file3 = Source.fromFile("/Users/luomingkui/Downloads/scala.txt")
val tokens = file3.mkString.split(",")
println(tokens.mkString(" "))
file3.close
}
}
4.读取网络资源、文件写入、控制台操作。
object Scala04_FromFile {
def main(args: Array[String]): Unit = {
// 读取网络资源
val webFile = Source.fromURL("http://www.baidu.com")
webFile.foreach(print)
webFile.close()
// 写入数据到文件
import java.io.{File, PrintWriter}
val writer = new PrintWriter(new File("hello.txt"))
for (i <- 1 to 100)
writer.println(i)
writer.close()
//控制台操作
//控制台交互--老API
print("请输入内容:")
val consoleLine1 = Console.readLine()
println("刚才输入的内容是:" + consoleLine1)
//控制台交互--新API
print("请输入内容(新API):")
val consoleLine2 = StdIn.readLine()
println("刚才输入的内容是:" + consoleLine2)
}
}
5.序列化
object Scala05_PersonMain {
def main(args: Array[String]): Unit = {
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)
}
}
}
@SerialVersionUID(1L) class Person extends Serializable{
override def toString = name + "," + age
val name = "Nick"
val age = 20
}
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.正则表达式
我们可以通过正则表达式匹配一个句子中所有符合匹配的内容,并输出。
object Scala06_Regex {
def main(args: Array[String]): Unit = {
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(","))
}
}