1. 程式人生 > >scala檔案和目錄操作

scala檔案和目錄操作

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 _)
  }





>>>>>__以上內容摘自:《快學Scala》  [美]Cay S. Horstmann著   電子工業出版社__<<<<<