scala檔案和目錄操作
阿新 • • 發佈:2018-12-25
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著 電子工業出版社__<<<<<