目录 [−]
- 实例化
- 文件读写
- Stream和编码
- 与Java交互
- 模式匹配
- 通配符
- 文件系统操作
- UNIX DSL
- 文件属性
- 文件比较
- 压缩解压缩
- 轻量级的ARM (自动化的资源管理)
- Scanner
- 文件监控
- Akka 风格的文件监控
对于使用Scala的程序员来说, I/O操作如文件的读写通常使用scala.io.Source来实现。但是这个类功能还是欠缺的,而且功能混乱,因此在Scala类库的增强提案(Scala IO fix-up/overhaul)中如何改进它争论相当的大,甚至有些开发者提议将这个库废掉,让社区实现的第三方来完成这方面的工作,或者引导开发者使用java.nio
来实现I/O操作。
当然,作为一个使用Scala的公司来说,可能会自己实现了辅助的I/O操作的方法, 比如类似FileUtils等名称的一些类。Java程序员可能已经熟悉了使用java.nio.file.Files、Guava、Apache common-io、jodd FileUtil等开源I/O库,但是如果使用Scala进行I/O操作时,虽然还是可以使用这些Java I/O库,但是毕竟还是不是那么纯粹,因此,我们可以关注一下Scala实现的I/O库,比如sbt io、Ammonite-Ops、better-files等。
本文为你推荐better-files。
为什么推荐better-files呢?让我们看看它的功能,就明白它的简单而强大了,就像一把I/O操作的瑞士军刀。
要使用better-files,只需加入下面的依赖:
|
|
它对Java NIO库进行了包装,不依赖其它的第三方库。
以下介绍摘译自better-files的官方文档。
实例化
下面的实例都是等价的,才可以采用多种方式得到File对象。可以通过字符串、String interpolator, Java File、隐式转换、定义的常量和操作符"/"等产生File对象。
|
|
文件读写
可以一行搞定:
|
|
类似C++/Shell风格的读写,和上面的功能一样:
|
|
或者这样:
|
|
流式接口风格:
|
|
Stream和编码
产生迭代器:
|
|
编解码:
|
|
与Java交互
转换成Java对象:
|
|
以及
|
|
模式匹配
|
|
通配符
|
|
甚至使用正则表达式:
|
|
文件系统操作
文件系统操作也非常的便利:
|
|
UNIX DSL
甚至提供了UNIX命令风格的操作:
|
|
文件属性
|
|
chmod
:
|
|
文件比较
|
|
排序:
|
|
压缩解压缩
|
|
轻量级的ARM (自动化的资源管理)
Auto-close Java closeables:
|
|
better-files
提供了更加便利的管理,因此下面的代码
|
|
可以写成:
|
|
Scanner
|
|
你甚至可以写定制的Scanner。
文件监控
普通的Java文件监控:
|
|
better-files
抽象了一个简单的接口:
|
|
或者用下面的写法:
|
|
Akka 风格的文件监控
|
|