15.Scala- 文件和正则表达式

第15章 文件和正则表达式

15.1 读取行

import scala.io.Source

object FileSyllabus {

  def main(args: Array[String]): Unit = {
    //文件读取
    val file1 = Source.fromFile("D:\\Data\\Scala\\随堂笔记\\笔记", "UTF-8")


    /*
    方式一:
    */
//    val lines = file1.getLines.mkString("\n")
//    println(lines)

    /*
    方式二:
     */
//    val lines = file1.getLines
//    lines.foreach(println(_))

    /*
    方式三:
     */
    val lines = file1.getLines
    for (line <- lines) {
      println(line)
    }
file1.close
} }

尖叫提示:记得close 

scala> val file1 = Source.fromFile("D:\\Data\\Scala\\随堂笔记\\笔记", "UTF-8")
file1: scala.io.BufferedSource = non-empty iterator


1) 文件内容转数组:

val array= file1.getLines.toArray

2) 文件内容转字符串:

val iterator = file1.mkString

15.2 读取字符

 由于Source.fromFile直接返回的就是Iterator[Char],所以可以直接对其进行迭代,按照字符访问里边每一个元素。

Source.fromFile("C:\\Users\\61661\\Desktop\\scala笔记.txt", "UTF-8") 
for(ch <- file2){
  println(ch)
}
file2.close

15.3 读取词法单元和数字

 如果想将以某个字符或某个正则表达式分开的字符成组读取,可以这么做:

val file3 = Source.fromFile("D:\\Data\\Scala\\随堂笔记\\info.csv")
val tokens = file3.mkString.split(",")
println(tokens.mkString(" "))
file3.close

15.4 读取网络资源、文件写入、控制台操作

 1) 读取网络资源

val webFile = Source.fromURL("http://www.baidu.com")
webFile.foreach(print)
//等价于: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) 控制台操作

 
     
import scala.io.{Source, StdIn}

//
控制台交互--老API print("请输入内容:") val consoleLine1 = Console.readLine() println("刚才输入的内容是:" + consoleLine1)
//控制台交互--新API print("请输入内容(新API):") val consoleLine2 = StdIn.readLine() println("刚才输入的内容是:" + consoleLine2)

/*
结果:

请输入内容:hello
刚才输入的内容是:hello
请输入内容(新API):hello
刚才输入的内容是:hello

  */

15.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)
  }
}

15.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了。

15.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) //non-empty iterator
    println((pattern2 findAllIn str).mkString(",")) //Scala,scala
 

猜你喜欢

转载自www.cnblogs.com/LXL616/p/11135933.html
今日推荐