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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值