Scala 中的文件操作

来源:互联网 发布:新手如何修眉 知乎 编辑:程序博客网 时间:2024/06/05 19:51

1.写入文件

1.FileWriter

专门用于处理文件的字符写入流对象

import java.io.FileWriterprintln(Try{  val out = new FileWriter("/home/hadoop3/file/num1.txt",true)   for (i <- 0 to 15)    out.write(i.toString)  out.close()})

new FileWriter("/home/hadoop3/file/num1.txt",true)如果文件不存在,则会新建文件,true是在文件末尾追加写入,默认为false,从文件开头重新写,如果之前有内容,则会删除原有内容。

2.RandomAccessFile

该对象特点:

1,该对象只能操作文件,所以构造函数接收两种类型的参数。

  • a.字符串路径。

  • b.File对象。

2,该对象既可以对文件进行读取,也可以写入。

在进行对象实例化时,必须要指定的该对象的操作模式,r rw等。

注意;该对象在实例化时,如果要操作的文件不存在,会自动建立。

如果要操作的文件存在,则不会建立。

如果存在的文件有数据,那么在没有指定指针位置的情况下,写入数据,会将文件开头的数据覆盖。

import java.io.RandomAccessFileval randomFile = new RandomAccessFile("/home/hadoop3/file/num.txt","rw")val fileLength = randomFile.length; //得到文件长度randomFile.seek(fileLength);//指针指向文件末尾for(i<- 'a' to 'g')randomFile.writeBytes(i.toString);//写入数据randomFile.close();

2.读文件

1.读取行

import scala.io.Sourceval source = Source.fromFile("myfile.txt", "UTF-8") // 第一个参数可以是字符串或java.io.File//如果你知道文件使用的是当前平台缺省的字符编码,则可以略去第二个字符编码参数val lineIterator = source.getLinesfor(L <- lineIterator) 处理 L//或者也可以对迭代器应用toArray或toBuffer方法,将这些行放到数组或数组缓冲中val lines = source.getLines.toArrayval contents = source.mkStringsource.close() //记得调用close

2.读取字符

import scala.io.Sourceval source = Source.fromFile("myfile.txt", "UTF-8") for (c <- source) 处理 c//想查看某个字符但又不处理它的话,可以调用source对象的buffered方法val source = Source.fromFile("myfile.txt", "UTF-8") val iter = source.buffered while (iter.hasNext){    if(iter.head 是符合预期的)        处理 iter.next    else ...}source.close()

3.读取词法单元和数字

val tokens = source.mkString.split("\\s+")val numbers = for(w <- tokens) yield w.toDouble//或者val numbers = tokens.map(_.toDouble)

4.读取二进制文件

val file = new File(filename)val in = new FileInputSteam(file)val bytes = new Array[Byte](file.length.toInt)in.read(bytes)in.close()

3.从URL或其他源读取

val source1 = Source.fromURL("http://horstamnn.com","UTF-8")val source2 = Source.fromString("Hello, World!")//从给定的字符串读取——对调试很有用val source3 = Source.stdin//从标准输入读取

原创粉丝点击