Scala学习笔记--文件IO
补充:
http://blog.csdn.net/lyrebing/article/details/20369445
http://developer.51cto.com/art/200907/134957.htm
http://nerd-is.in/2013-08/scala-learning-files-and-regular-expressions/
读取行
//读取文件中的所有行,可以调用scala.io.Source对象的getLines方法 object LineIO{ def main(args:Array[String]):Unit = { val source = Source.fromFile("F:\\way.txt","UTF-8") //第一个参数可以是字符串或者是java.io.File //第二个参数可省略 val lineIterator =source.getLines //结果是一个迭代器 for(l<-lineIterator) println(l) //或者可以对迭代器应用toArray或toBuffer方法,将行放到数组或数组缓冲当中 val lines = source.getLines.toArray //将整个文件读取成一个字符串 //val contents = source.mkString; source.close } }
读取字符(一个一个字符处理)
//按字符处理 object CharIO{ def main(args:Array[String]):Unit={ val source =Source.fromFile("F:\\way.txt","UTF-8") val iter= source.buffered //println(iter.length) while(iter.hasNext){ print(iter.next.toString) } source.close } }
读取词法单元和数字
object NumIO{ def main(args:Array[String]):Unit={ val source = Source.fromFile("F:\\num.txt","UTF-8") val tockens = source.mkString.split(" ") for(w<-tockens){ println(w.toInt) } //另一种方法 val numbers = for(w<-tockens) yield w.toDouble for(num<-numbers){ println(num) } //另一种方法 val numbers2 = tockens.map(_.toDouble) } }
从URL或其他源读取
//读取非文件源的方法 object URLIO{ def main(args:Array[String]):Unit={ //从URL读取 val source= Source.fromURL("http://www.baidu.com","UTF-8") val lineIterator =source.getLines for(l<-lineIterator){ println(l.toString()) } //从给定的字符串读取--调试有用 val source2= Source.fromString("Hello world") //从标准输入读取 val source3 = Source.stdin } }
运行结果为网址的html
读取二进制文件
Scala没有提供读取二进制文件的方法,需要使用Java类库
object URLIO{ def main(args:Array[String]):Unit={ val file = new File("F:\\info.bin") val in = new FileInputStream(file) val bytes = new Array[Byte](file.length.toInt) in.read(bytes) in.close } }
写入文本文件
object WriteIO{ def main(args:Array[String]):Unit={ val out = new PrintWriter("F:\\numbers.txt") for(i<-1 to 100) out.println(i) out.close } }