Scala的IO主要是对java的IO进行简单的封装.
package com.tv189.test import java.io.{File, PrintWriter} import scala.io.Source /** * Created by molyeo on 2015/8/12. */ object FileOps { def main(args: Array[String]) { val file = Source.fromFile("E://FileOps.txt") for (line <- file.getLines) { println(line) } file.close } }
其中FileOps.txt文件内容就是代码内容,控制台输出和代码一样。
Scala读取网页内容比较方便,比如读取博客内容可采用如下代码。
package com.tv189.test import java.io.{File, PrintWriter} import scala.io.Source /** * Created by molyeo on 2015/8/12. */ object FileOps { def main(args: Array[String]) { val webFile = Source.fromURL("http://www.cnblogs.com/molyeo/") webFile.foreach(print) webFile.close } }
Scala可以无缝使用java的IO,比如输出0到10的内容,由于scalaFile.txt没有指定路径,则在当前项目下面生成scalaFile.txt文件
package com.tv189.test import java.io.{File, PrintWriter} /** * Created by molyeo on 2015/8/12. */ object FileOps { def main(args: Array[String]) { val writer = new PrintWriter(new File("scalaFile.txt")) for (i <- 1 to 10) writer.println(i) writer.close() } }
正则表达式的构成和匹配模式可以参考 java.util.regex.Pattern 类,不过scala中正则表达式和模式匹配结合起来可以实现强大的功能。
object RegExpressOps { def main(args: Array[String]): Unit = { val regex="""([0-9]+) ([a-z]+)""".r val numPattern = "[0-9]+".r val numberPattern = """/s+[0-9]+/s+""".r val date = """(/d/d/d/d)-(/d/d)-(/d/d)""".r "2015-08-12" match { case date(year, month, day) => println(s"$year was a good year for PLs.") } for (matchString <- numPattern.findAllIn("99345 Scala, 22298 Spark")) println(matchString) println(numberPattern.findFirstIn("99ss java, 222 hadoop 223")) val numitemPattern="""([0-9]+) ([a-z]+)""".r val line = "999 spark" line match{ case numitemPattern(num, blog) => println(num + " " + blog) case _ => println("Oops...") } } }
其中 findFirstIn 方法返回值为遍历所有匹配项的迭代器,而findFirstIn方法则返回匹配项的第一个值,此外Regex还有很多其他强大的方法,不在赘述。