有人说Path是用来替换File的,实际上Path只具备File的部分功能,Path只是用来管理文件路径的。但是Files和Path结合使用,可以更好的完成File原有的功能。
1、类介绍:
Files类 是JDK1.7中定义的静态工具类,包含对文件,目录或其他类型文件进行操作的静态方法。在大多数情况下,Files中定义的方法将委托给相关的文件系统提供程序(file system provider)来执行文件操作。JDK中的介绍:This class consists exclusively of static methods that operate on files, directories, or other types of files.
Path接口 是JDK1.7中定义的接口,主要用来在文件系统中定位文件,通常表示系统相关的文件路径。JDK中的介绍:An object that may be used to locate a file in a file system. It will typically represent a system dependent file path.
Path主要用来管理文件路径,对Path不熟悉的读者,可以参考:Path类和Paths类。
2、Files类主要方法
Files类是静态工具类,使用的时候直接调用静态方法即可,不需要获取实例。所以,这里直接介绍Files类的方法。这里按方法的第一个单词,划分一个个的系列分别来介绍强大的Files类的静态方法。
2.1 复制文件内容
1) long copy(InputStream in, Path target, CopyOption... options):
作用:将所有字节从输入流in复制到文件target。
注意事项:默认情况,如果目标文件已经存在或是一个符号链接,则复制失败;指定了REPLACE_EXISTING的情况,如果目标文件已经存在,那么只要它不是一个非空目录(例如它是一个空目录,或者是一个符号链接),它就会被替换。截止到JDK1.8,options只支持REPLACE_EXISTING
。
返回值:复制的字节长度。
2)long copy(Path source, OutputStream out):
作用:将从文件的所有字节复制到输出流。
注意事项:
1)当发生异常的时候,由于输出了可能已经获取到了一部分内容(但不一定是全部,甚至获取到全部内容的可能性应该很小很小),所以输出流此时的内容可能很奇怪,应该直接关闭。
2)如果输出流是Flushable的实现类的实例,在执行完方法以后应该调用flush方法以刷新缓存。
返回值:复制的字节长度。
3)Path copy(Path source, Path target, CopyOption... options):
作用:将一个文件复制到目标文件。
注意事项:
所有情况下,如果source和target是一个文件,复制操作都不会执行。
默认情况:如果目标文件已经存在,或者是一个符号链接,那么复制失败;
REPLACE_EXISTING:如果目标文件已经存在,那么只要它不是一个非空目录(例如它是一个空目录,或者是一个符号链接),它就会被替换。
COPY_ATTRIBUTES:把source的文件属性复制给target,被复制的属性取决于平台和文件系统,但是至少在source和target都支持的情况下,会复制最新修改时间。
NOFOLLOW_LINKS:直接复制符号链接自身,而不是符号链接指向的目的地。可被复制的属性也会被复制,也就是说NOFOLLOW_LINKS的情况下配置COPY_ATTRIBUTES是没有意义的。
2.2 创建文件/目录/符号链接
1)Path createDirectories(Path dir, FileAttribute<?>... attrs):
作用:创建目录,并设置属性。如果父目录不存在,全部创建。
注意事项:如果传入的文件属性不支持创建的时候,会自动设置;如果目标目录已经存到但是不是文件夹,会抛出异常。
2)Path createDirectory(Path dir, FileAttribute<?>... attrs):
作用:创建目录,并设置属性
注意事项:需要有父路径的情况下才能使用。
3)Path createTempDirectory(Path dir, Path dir, FileAttribute<?>... attrs):
作用:
4)Path createTempDirectory(Path dir, FileAttribute<?>... attrs):
作用:
5)Path createFile(Path path, FileAttribute<?>... attrs):
作用:
6)Path createTempFile(Path dir, String prefix, String suffix, FileAttribute<?>... attrs):
作用:
7)Path createTempFile(String prefix, String suffix, FileAttribute<?>... attrs):
作用:
8)Path createLink(Path link, Path existing):
作用:
9)Path createSymbolicLink(Path link, Path target, FileAttribute<?>... attrs):
作用:
2.3 文件删除
1)void delete(Path path):
作用:如果目标存在,并且是文件或者空的文件夹,就删除文件并返回true;如果目标不存在,或者目标是非空的文件夹,就会抛出异常。
2)boolean deleteIfExists(Path path):
作用:如果目标存在,并且是文件或者空的文件夹,就删除文件并返回true;如果目标不存在,就返回false;如果目标是非空的文件夹,就抛出异常。
3)boolean exists(Path path, LinkOption... options):
作用:测试文件是否存在