31_io_四个节点流_01
import java.io._ // 1. FileReader & FileWriter object FileReaderTest extends App { // 读取文件 //1. 实例化File类对象,指明要操作的对象 private val file = new File("sparkcore/src/main/data/word.txt") println(file.exists()) //2. 创建FileReader对象 private val reader = new FileReader(file) //3. 读取数据 // read方法 按指定编码读取一个字符,并返回字符对应的int值,当没有数据时,返回-1 // 一个字符一个字符的读取 // 如果这块遇到错误,流将无法关闭,可能造成内存泄漏 /* private var i = reader.read() while (i != -1) { print(i.toChar) i = reader.read() }*/ //3.1 读取数据 // read(Array[]) 方法,每次读取字符个数为 字符数组长度 并将读取的字符存储到数组中 // 返回值为读取到的字符个数,读取不到时返回 -1 // 注意事项 // 1. 当读取字符 小于数组长度时,数组内会存留上次读取的内容 println("====================") var arr: Array[Char] = new Array[Char](5) private var i: Int = reader.read(arr) while (i != -1) { printf(s"${new String(arr, 0, i)}") i = reader.read(arr) } println("") //4. 关闭流!!! reader.close() println("完成读取") // 写入文件 //1. 创建File对象,指定文件路径 private val outputfile: File = new File("sparkcore/src/main/data/wordNew.txt") //2. 创建流对象 // 指定文件不存在,会创建文件 // append = true 追加写入 默认为 false(覆盖写入) private val writer = new FileWriter(outputfile, true) //3. 写入数据 writer.write(97) // 将指定int对应的字符写入到输出流 private val chars: Array[Char] = Array[Char]('a', 'b', 'c', '\n') writer.write(chars) // 将字符数组中的数据写入到输出流 writer.write("中国人") // 将字符串写入到输出流 //4. 刷新缓冲区 writer.flush //4. 关闭流 writer.close println("写入完成") } // 2. FileInputStream & FileOutputStream object FileInputStreamTest extends App { //读取数据 //1. 创建file对象 private val file = new File("sparkcore/src/main/data/word.txt") //2. 创建流对象 private val inStream = new FileInputStream(file) //3. 读取数据 private val i: Int = inStream.read() // 从输入流中读取一个字节,返回这个字节对应的(无符号)int值 private val bytes = new Array[Byte](5) // 从输入流中读取b.length个字节,并将读取的字节存储到参数数组中,返回读取到字节的个数 inStream.read(bytes) println(i) println(bytes.mkString(" ")) //4. 关闭流 inStream.close //写入数据 //1. 创建file对象 private val outfile = new File("sparkcore/src/main/data/wordbyte.txt") //2. 创建FileOutputStream对象 private val outStream = new FileOutputStream(outfile) //3. 写入数据 outStream.write(97) //将指定int对应的字节写入到输出流 private val valbytes: Array[Byte] = Array[Byte](98, 99, 100, 12) outStream.write(valbytes) //将字节数组中的数据写入到输出流 //4. 刷新缓冲区 outStream.flush //5. 关闭流 outStream.close } // 3. FileInputStream & FileOutputStream - 复制非文本文件 及测速 250毫秒 object CopyFileByStreamTest extends App { // 定义方法 // 复制inPath指定的文件 到outPath指定的文件 def copyFile(inPath: String, outPath: String) = { //1. 创建File对象 + FileInputSteam对象 val inStream = new FileInputStream(new File(inPath)) //2. 创建File对象 + FileOutputSteam对象 val outStream = new FileOutputStream(new File(outPath)) //3. 读取 var bytes = new Array[Byte](10) var i: Int = inStream.read(bytes) while (i != -1) { outStream.write(bytes, 0, i) i = inStream.read(bytes) } //4. 关闭流 inStream.close outStream.close } //调用方法 val inPath = "sparkcore/src/main/data/yarn架构图.png" val outPath = "sparkcore/src/main/data/yarn架构图1.png" //计时 val start: Long = System.currentTimeMillis copyFile(inPath, outPath) val end: Long = System.currentTimeMillis println(s"耗时 : ${end - start}毫秒") }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界