1.写入文件
1.FileWriter
专门用于处理文件的字符写入流对象
import java.io.FileWriter
println(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.RandomAccessFile
val 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.Source
val source = Source.fromFile("myfile.txt", "UTF-8")
// 第一个参数可以是字符串或java.io.File
//如果你知道文件使用的是当前平台缺省的字符编码,则可以略去第二个字符编码参数
val lineIterator = source.getLines
for(L <- lineIterator) 处理 L
//或者也可以对迭代器应用toArray或toBuffer方法,将这些行放到数组或数组缓冲中
val lines = source.getLines.toArray
val contents = source.mkString
source.close() //记得调用close
2.读取字符
import scala.io.Source
val 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//从标准输入读取