Scala 文件和正则表达式

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员学习圈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值