Javanio之Files

这是我参与8月更文挑战的第15天,活动详情查看:8月更文挑战


Files是Java1.7 在nio中新增的专门用于处理文件和目录的工具类。FilesPath配合可以很方便的完成对文件/目录的创建、读取、修改、删除等操作。

检查文件/目录是否存在

existsnotExists方法用来检查Path指代的文件/目录是否存在,参数LinkOption 表示是否关注链接,可以不传

image.png

示例

  • exists:文件/目录存在时返回true

image.png

  • notExists:文件/目录不存在时返回true

image.png

创建文件/目录

Files中用于创建文件/目录的方法都使用create开头,返回值是Path。参数FileAttribute (文件的属性如读写权限)是可选参数可以不传, 如下图所示:

image.png

示例

  • createDirectory; 新建一个目录

image.png

  • createDirectories:新建多级目录

image.png

  • createTempDirectory:在指定目录下创建根据前缀生成的名称的新临时目录

image.png

  • createFile: 新建文件

image.png

  • createTempFile: 新建临时文件

image.png

删除文件/目录

删除文件可以使用deletedeleteIfExists方法。deletedeleteIfExists不同的是当要删除的对象不存在时会返回false

image.png

示例

  • delete:删除文件, 文件不存在时抛出异常

image.png

  • deleteIfExists:如果文件存在就删除返回true,不存在返回false

image.png

列出子目录/文件

列出子目录/文件主要使用listwalklistwalk的区别在于list只返回直属的子目录或文件,walk会返回所有的子目录或文件

image.png

示例

  • list:返回直属的子目录或文件的Stream

image.png

  • walk:返回所有的子目录或文件的Stream

image.png

查找文件

查找文件可以使用find方法。find方法用于在查找指定目录下符合规则的文件,参数BiPredicate是个函数式接口,用于指定要查找文件满足的规则

image.png

示例
image.png

复制文件/目录

可以使用copy方法复制文件或目录。copy有两个重载的方法用于将InputStream复制到目标文件中,或将文件中的数据复制到OutputStream

image.png

示例

  • 复制文件/目录

image.png

  • 将InputStream中的数据复制到目标文件中,目标文件的父目录不存在时会抛出异常

image.png

  • 将本地文件中的内容复制到OutputStream

image.png

移动文件

move方法被用来移动文件文件,和copy方法一样move只能移动Path指定的文件,即Path是目录时不会移动Path下面的子文件和目录

示例
image.png

向文件中写入内容

向文件中写入数据可以使用write方法。

image.png

OpenOption参数不存在时,会清除原内容

示例

  • 以字节的形式写入

image.png

  • 写入多行数据

image.png

  • 写入多行数据,指定字符的编码,写入方式为追加

image.png

读取文件内容

从文件中读取数据的方法有linesreadAllLinesreadAllByteslinesreadAllLines默认使用UTF-8字符集。

image.png

image.png

示例

  • lines:读取所有数据,返回一个Stream

image.png

  • readAllLines: 读取所有数据,返回一个List

image.png

  • readAllBytes: 读取所有数据,返回一个字节数组

image.png

转成输入、输出流、Channel

Files也提供了将Path指代的文件转成输入、输出流和Channel的方法。

image.png

image.png

示例

image.png