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著 电子工业出版社__<<<<<