scala文件和目录操作
http://blog.csdn.net/caiandyong/article/details/52005580
scala文件
1.读取行
要读取文件的所有行,可以调用scala.io.Source对象的getLines方法:
- import scala.io.Source
- object HelloWord{
- def main(args:Array[String]):Unit = {
- val fileName = "d:\\scalaTestFile.txt"
- val source = Source.fromFile(fileName)
- val lines = source.getLines
- source.close;//记得要关闭source
- for(line <- lines){
- println(line)
- }
- }
- }
也可以对getLines应用toArray或toBuffer方法,将这些行放到数组或缓冲当中。
- val lines1 = source.getLines.toArray
- val lines2 = source.getLines.toBuffer
将文件内容读成一个字符串:
val lines = source.mkString
2.读取字符
要从文件中读取字符,可以直接把Source对象当做迭代器:
- val fileName = "d:\\scalaTestFile.txt"
- val source = Source.fromFile(fileName)
- for(c <- source){
- println(c)
- }
如果想查看某个字符,但是不处理掉的话,调用source对象的buffered方法。
- val fileName = "d:\\scalaTestFile.txt"
- val source = Source.fromFile(fileName)
- val iter = source.buffered
- while(iter.hasNext){
- if(iter.next == '王'){
- println("wang")
- }else{
- println("-")
- }
- }
3.读取词法单元或数字
通过split方法对转化成行的文件内容进行划分,通过toInt或toDouble方法把字符转化成整数或浮点数。
- val fileName = "d:\\scalaTestFile.txt"
- val source = Source.fromFile(fileName)
- val iter = source.mkString.split("\\s+")
- println(iter(0))
- val num = for(w <- iter) yield w.toDouble
- for(i <- num) println(i)
4.从URL或其它资源读取
- import scala.io.Source
- import scala.util.control.Breaks._
- object HelloWord{
- def main(args:Array[String]):Unit = {
- val source1 = Source.fromURL("http://baidu.com")//URL读取
- val source2 = Source.fromString("hello")//读取给定的字符串-多用于调试
- val source3 = Source.stdin//从标准输入读取
- breakable{
- while(source3.hasNext){
- val s3in = source3.next
- if(s3in == 'q'){
- break
- }else{
- println(s3in)
- }
- }
- }
- }
- }
5.写入文本
Scala没有內建的对写入文件的支持,要写入文本文件,可以使用java.io.PrintWriter.
- import java.io.PrintWriter
- object HelloWord{
- def main(args:Array[String]):Unit = {
- val out = new PrintWriter("d:\\testScalaWrite.txt")
- for(i <- 1 to 10){
- out.print(i + "+")
- }
- out.close()
- }
- }
6.访问目录
- //遍历某目录下所有的子目录
- import java.io.PrintWriter
- import java.io.File
- import scala.reflect.io.Directory
- object HelloWord{
- def main(args:Array[String]):Unit = {
- for(d <- subDir(new File("d:\\AAA\\")))
- println(d)
- }
- def subDir(dir:File):Iterator[File] ={
- val children = dir.listFiles().filter(_.isDirectory())
- children.toIterator ++ children.toIterator.flatMap(subDir _)
- }
- }
- //遍历某目录下所有的文件和子文件
- def main(args:Array[String]):Unit = {
- for(d <- subDir(new File("d:\\AAA\\")))
- println(d)
- }
- def subDir(dir:File):Iterator[File] ={
- val dirs = dir.listFiles().filter(_.isDirectory())
- val files = dir.listFiles().filter(_.isFile())
- files.toIterator ++ dirs.toIterator.flatMap(subDir _)
- }
浙公网安备 33010602011771号