1. 读取行

读取文件,可以使用scala.io.Source对象的fromFile方法.如果读取所有行可以使用getLines方法:

  1. val source = Source.fromFile("/home/xiaosi/exception.txt", "UTF-8")
  2. val lineIterator = source.getLines()
  3. for(line <- lineIterator){
  4. println(line)
  5. }
  6. source.close()

source.getLines返回结果为一个迭代器,可以遍历迭代器逐条处理行.

如果想吧整个文件当做一个字符串处理,可以调用mkString方法:

  1. val content = source.mkString

备注

在用完Source对象后,记得调用close方法进行关闭

2. 读取字符

读取字符,可以直接把Source对象当做迭代器使用,因为Source类扩展了Iterator[Char]:

  1. val source = Source.fromFile("/home/xiaosi/exception.txt", "UTF-8")
  2. for(c <- source){
  3. print(c + " ")
  4. }

3. 从URL或其他源读取数据

Source对象有读取非文件源的方法:

  1. // 从URL中读取数据
  2. val sourceUrl = Source.fromURL("http://xxx", "UTF-8")
  3. // 从字符串中读取数据
  4. val sourceStr = Source.fromString("Hello World!")
  5. // 从标准输入读取数据
  6. val sourceStd = Source.stdin

4. 读取二进制文件

Scala并没有提供读取二进制文件的方法.但是你可以使用Java类库来完成读取操作:

  1. val file = new File(fileName)
  2. val in = new FileInputStream(file)
  3. val bytes = new Array[byte](file.length.toInt)
  4. in.read(bytes)
  5. in.close()

5. 写入文本文件

Scala并没有内置的对写入文件的支持.但是可以使用java.io.PrintWriter来完成:

  1. val out = new PrintWriter("/home/xiaosi/exception.txt")
  2. out.println("Hello World")
  3. out.println("Welcome")
  4. out.close()

6. 访问目录

目前Scala并没有用来访问某个目录中的所有文件,或者递归的遍历所有目录的类,我们只能寻求一些替代方案.

利用如下代码可以实现递归遍历所有的子目录:

  1. // 递归遍历目录
  2. def subDirs(dir: File) : Iterator[File] = {
  3. val children = dir.listFiles().filter(_.isDirectory)
  4. children.toIterator ++ children.toIterator.flatMap(subDirs _)
  5. }
  6. val file = new File("/home/xiaosi/test")
  7. val iterator = subDirs(file)
  8. for(d <- iterator){
  9. println(d)
  10. }

[Scala]Scala学习笔记六 文件的更多相关文章

  1. nodejs学习笔记<六>文件处理

    nodejs处理文件模块:fs  —>  var fs = require(‘fs’); 读取文件:readFileSync & readFile 读取文件路径为绝对: 读取结果需要to ...

  2. Python学习笔记六--文件和输入输出

    6.1文件对象 所有Python对文件的操作都是基于对文件对象的操作.那么就从文件对象的创建说起.open()[file()]提供初始化输入输出的接口.open()成功打开文件时会返回一个文件对象. ...

  3. python学习笔记(六)---文件操作与异常处理机制

    文件读取 读取整个文件 要读取文件,需要一个包含几行文本的文件.下面首先来创建一个文件,它包含精确到小数点后30位的圆周率值,且在小数点后每10位处都换行: pi_digits.txt 3.14159 ...

  4. Scala入门学习笔记三--数组使用

    前言 本篇主要讲Scala的Array.BufferArray.List,更多教程请参考:Scala教程 本篇知识点概括 若长度固定则使用Array,若长度可能有 变化则使用ArrayBuffer 提 ...

  5. java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)

    java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessCo ...

  6. python3.4学习笔记(六) 常用快捷键使用技巧,持续更新

    python3.4学习笔记(六) 常用快捷键使用技巧,持续更新 安装IDLE后鼠标右键点击*.py 文件,可以看到Edit with IDLE 选择这个可以直接打开编辑器.IDLE默认不能显示行号,使 ...

  7. 【opencv学习笔记六】图像的ROI区域选择与复制

    图像的数据量还是比较大的,对整张图片进行处理会影响我们的处理效率,因此常常只对图像中我们需要的部分进行处理,也就是感兴趣区域ROI.今天我们来看一下如何设置图像的感兴趣区域ROI.以及对ROI区域图像 ...

  8. Liunx学习笔记(三) 文件权限

    一.文件权限 1.查看文件权限 (1)文件权限 在 Linux 中对于文件有四种访问权限,列举如下: 可读取:r,Readable 可写入:w,Writable 可执行:x,Execute 无权限:- ...

  9. Linux学习笔记(六) 进程管理

    1.进程基础 当输入一个命令时,shell 会同时启动一个进程,这种任务与进程分离的方式是 Linux 系统上重要的概念 每个执行的任务都称为进程,在每个进程启动时,系统都会给它指定一个唯一的 ID, ...

随机推荐

  1. 如何用纯 CSS 创作一个摇摇晃晃的 loader

    效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览.https://codepen.io/comehope/pen/oyJvpe 可交互视频 此 ...

  2. mybaties mapping中if..else

    <select id="selectSelective" resultMap="xxx" parameterType="xxx"> ...

  3. storm(二) 事务机制

    前言 为了保证tuple的强有序和exactly-once语义,storm提供了事务机制,为每个tuple提供一个id 设计方法1 为每个tuple设置一个事务id,在数据库保存事务id和当前处理的i ...

  4. 盘点SQL on Hadoop中用到的主要技术

    转载自:http://sunyi514.github.io/2014/11/15/%E7%9B%98%E7%82%B9sql-on-hadoop%E4%B8%AD%E7%94%A8%E5%88%B0% ...

  5. mac下搭建eclipse+git环境并导入项目

    首先官网下载eclipse,然后安装,选择eclipse for java developer. 安装git插件:eclipse-help-install new software-add name随 ...

  6. python下调用不在环境变量中的firefox

    from selenium.webdriver.firefox.firefox_binary import FirefoxBinary binary = FirefoxBinary(r"D: ...

  7. eclipse使用lombok

    1.下载lombok.jar,将lombok复制到eclipse的安装路径下,如图: 2.在eclipse.ini配置文件最后加入:-javaagent:D:\Program Files\Eclips ...

  8. bzoj1007: [HNOI2008]水平可见直线 单调栈维护凸壳

    在xoy直角坐标平面上有n条直线L1,L2,...Ln,若在y值为正无穷大处往下看,能见到Li的某个子线段,则称Li为可见的,否则Li为被覆盖的.例如,对于直线:L1:y=x; L2:y=-x; L3 ...

  9. 21.线程池ThreadPoolExecutor实现原理

    1. 为什么要使用线程池 在实际使用中,线程是很占用系统资源的,如果对线程管理不善很容易导致系统问题.因此,在大多数并发框架中都会使用线程池来管理线程,使用线程池管理线程主要有如下好处: 降低资源消耗 ...

  10. 到底啥是平台,到底啥是中台?李鬼太多,不得不说(ZT)

    (1)哪些不是中台,而是应该叫平台 做开发,有所谓的三层技术架构:前端展示层.中间逻辑层.后端数据层.我们现在讲的中台不在这个维度上. 做开发,还有所谓的技术中间件.一开始我们没有中间件的概念,只有操 ...