[Scala]Scala学习笔记六 文件
1. 读取行
读取文件,可以使用scala.io.Source对象的fromFile
方法.如果读取所有行可以使用getLines
方法:
val source = Source.fromFile("/home/xiaosi/exception.txt", "UTF-8")
val lineIterator = source.getLines()
for(line <- lineIterator){
println(line)
}
source.close()
source.getLines返回结果为一个迭代器,可以遍历迭代器逐条处理行.
如果想吧整个文件当做一个字符串处理,可以调用mkString
方法:
val content = source.mkString
备注
在用完Source对象后,记得调用close方法进行关闭
2. 读取字符
读取字符,可以直接把Source对象当做迭代器使用,因为Source类扩展了Iterator[Char]
:
val source = Source.fromFile("/home/xiaosi/exception.txt", "UTF-8")
for(c <- source){
print(c + " ")
}
3. 从URL或其他源读取数据
Source对象有读取非文件源的方法:
// 从URL中读取数据
val sourceUrl = Source.fromURL("http://xxx", "UTF-8")
// 从字符串中读取数据
val sourceStr = Source.fromString("Hello World!")
// 从标准输入读取数据
val sourceStd = Source.stdin
4. 读取二进制文件
Scala并没有提供读取二进制文件的方法.但是你可以使用Java类库来完成读取操作:
val file = new File(fileName)
val in = new FileInputStream(file)
val bytes = new Array[byte](file.length.toInt)
in.read(bytes)
in.close()
5. 写入文本文件
Scala并没有内置的对写入文件的支持.但是可以使用java.io.PrintWriter
来完成:
val out = new PrintWriter("/home/xiaosi/exception.txt")
out.println("Hello World")
out.println("Welcome")
out.close()
6. 访问目录
目前Scala并没有用来访问某个目录中的所有文件,或者递归的遍历所有目录的类,我们只能寻求一些替代方案.
利用如下代码可以实现递归遍历所有的子目录:
// 递归遍历目录
def subDirs(dir: File) : Iterator[File] = {
val children = dir.listFiles().filter(_.isDirectory)
children.toIterator ++ children.toIterator.flatMap(subDirs _)
}
val file = new File("/home/xiaosi/test")
val iterator = subDirs(file)
for(d <- iterator){
println(d)
}
[Scala]Scala学习笔记六 文件的更多相关文章
- nodejs学习笔记<六>文件处理
nodejs处理文件模块:fs —> var fs = require(‘fs’); 读取文件:readFileSync & readFile 读取文件路径为绝对: 读取结果需要to ...
- Python学习笔记六--文件和输入输出
6.1文件对象 所有Python对文件的操作都是基于对文件对象的操作.那么就从文件对象的创建说起.open()[file()]提供初始化输入输出的接口.open()成功打开文件时会返回一个文件对象. ...
- python学习笔记(六)---文件操作与异常处理机制
文件读取 读取整个文件 要读取文件,需要一个包含几行文本的文件.下面首先来创建一个文件,它包含精确到小数点后30位的圆周率值,且在小数点后每10位处都换行: pi_digits.txt 3.14159 ...
- Scala入门学习笔记三--数组使用
前言 本篇主要讲Scala的Array.BufferArray.List,更多教程请参考:Scala教程 本篇知识点概括 若长度固定则使用Array,若长度可能有 变化则使用ArrayBuffer 提 ...
- java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)
java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessCo ...
- python3.4学习笔记(六) 常用快捷键使用技巧,持续更新
python3.4学习笔记(六) 常用快捷键使用技巧,持续更新 安装IDLE后鼠标右键点击*.py 文件,可以看到Edit with IDLE 选择这个可以直接打开编辑器.IDLE默认不能显示行号,使 ...
- 【opencv学习笔记六】图像的ROI区域选择与复制
图像的数据量还是比较大的,对整张图片进行处理会影响我们的处理效率,因此常常只对图像中我们需要的部分进行处理,也就是感兴趣区域ROI.今天我们来看一下如何设置图像的感兴趣区域ROI.以及对ROI区域图像 ...
- Liunx学习笔记(三) 文件权限
一.文件权限 1.查看文件权限 (1)文件权限 在 Linux 中对于文件有四种访问权限,列举如下: 可读取:r,Readable 可写入:w,Writable 可执行:x,Execute 无权限:- ...
- Linux学习笔记(六) 进程管理
1.进程基础 当输入一个命令时,shell 会同时启动一个进程,这种任务与进程分离的方式是 Linux 系统上重要的概念 每个执行的任务都称为进程,在每个进程启动时,系统都会给它指定一个唯一的 ID, ...
随机推荐
- 20145216史婧瑶《Java程序设计》第10周学习总结
20145216 <Java程序设计>第10周学习总结 教材学习内容总结 网络编程 一.网络概述 网络编程就是两个或多个设备(程序)之间的数据交换. 识别网络上的每个设备:①IP地址②域名 ...
- 快速升级openwrt的linux内核版本
一.分析 要升级openwrt的linux内核版本,关键是要制作内核配置文件 二.内核配置文件制作方法 2.1当前openwrt对应的某个开发板有对应的内核配置文件,比如此时的openwrt的linu ...
- IPFS星际节点网站 IPNS域名解析教程
IPNS星际文件系统IPFS提供的域名命名空间,相当于经典HTTP协议中的DNS.只不过是,IPNS是将内容寻址的哈希值(HASH值)转换为域名,而DNS是将IP地址转换为域名. 前段时间,IPFS协 ...
- PAT L3-012 水果忍者
占个坑,等自己数学好一点以后再来重新把这个题写一遍 附上链接 附上大牛代码: #include <stdio.h> #include <algorithm> #define I ...
- 解题报告:hdu1013 Digital Roots
2017-09-07 22:02:01 writer:pprp 简单的水题,但是需要对最初的部分进行处理,防止溢出 /* @theme: hdu 1013 Digital roots @writer: ...
- poj 3461 - Oulipo 经典kmp算法问题
2017-08-13 19:31:47 writer:pprp 对kmp算法有了大概的了解以后,虽然还不够深入,但是已经可以写出来代码,(可以说是背会了) 所以这道题就作为一个模板,为大家使用吧. 题 ...
- ADO.NET 使用DELETE语句批量删除操作,提示超时,删除失败,几种优化解决思路
起因是如此简单的一句sql 提示:Timeout 时间已到.在操作完成之前超时时间已过或服务器未响应. 提供几种解决思路: 1.检查WHERE条件中字段是否已建索引 2.检查是否被其他表引用,引用表外 ...
- HDFS读写流程learning
有许多对流程进行描述的博客,但是感觉还是应当学习一遍代码,不然总感觉怪怪的,https://blog.csdn.net/popsuper1982/article/details/51615285,首先 ...
- Educational Codeforces Round 54 (Rated for Div. 2) DE
D 给出一个无向图,需要删去一些边,想知道最后能有多少个点到1的距离还是过去那么短 如果求一个最短路,然后从删边的角度看,看起来很难做,但是如果从零开始加边就会有做法,如同prim那样,先加入和1直接 ...
- hdu 1241 搬寝室 水dp
搬寝室 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem Desc ...