文件NIO学习体会

  Files类是java.nio.file包的一个主要入口点,这个类提供了一系列静态的方法来读、写和操控文件或目录,Files的方法工作在Path对象的实例上。

  • 检测文件或目录

验证一个文件或目录是否存在可以使用exists(Path path,LinkOption[] option)和notExists(Path path,LinkOption[] option)。需要注意的是验证一个文件是否存在可能有三种结果

  1. 文件存在
  2. 文件不存在
  3. 文件状态未知,无法验证

因此,我们不能认为!exists(Path path)与notExists(Path path)是相等的

  • 检测文件的可访问性

我们可以使用isReadable(Path path)、isWritable(Path path)和isExcutable(Path path)来判断一个文件是否可读、可写和可执行。例如:

Path file = ...;

boolean isRegularExecutableFile = Files.isRegularFile(file) &

Files.isReadable(file) & Files.isExecutable(file);

  • 检测两个路径是否定位了同样的文件

    在文件系统中,我们有时需要判断2个路径是否指定了同样的文件,我们可以使用isSameFile(Path path1,Path path2)方法来进行判断。:

  • 删除文件或目录

    当我们需要删除一个文件或目录时,新NIO的Files提供了2个方法来完成这个目的

    1. 使用delete(Path path),如果删除的文件不存在或删除的目录中包含文件都会抛出NoSuchFileException或DirectoryNotEmptyException。例如:

    try {

    Files.delete(path);

    } catch (NoSuchFileException x) {

    System.err.format("%s: no such" + " file or directory%n", path);

    } catch (DirectoryNotEmptyException x) {

    System.err.format("%s not empty%n", path);

    } catch (IOException x) {

    // File permission problems are caught here.

    System.err.println(x);

    }

                          2、使用deleteIfExists(path)方法删除文件或目录,即使文件存在也被会抛出异常。

  • 拷贝文件或目录

    文件类提供了copy(Path path1,Path path2,CopyOption[] option)来实现文件或目录的拷贝,当目标文件存在时是否抛出异常要根据CopyOption枚举值来确定

    其枚举值的定义如下:

    REPLACE_EXISTING:该选项表示,即使目标文件存在也执行拷贝,如果要拷贝的是符号链接(Symbolic link)链接本身被拷贝,而链接的目标不会被拷贝,如果拷贝到一个非空目录,FileAlreadyExistsException异常被抛出

    COPY_ATTRIBUTES:该选项表示拷贝源文件相关的所有属性到目标文件,目标文件是否具有源文件拷贝过来的属性取决于相应的系统或平台,但是最后修改时间总是可以正确拷贝,它是跨平台的。

    NOFOLLOW_LINKS:该选项主要用于符号链接(Symbolic link),拷贝的是链接本身,而被是链接的目标。

    此外,文件类还提供了用于文件与流之间的拷贝的方法:copy(InputStream in,Path path,CopyOption[] option)该方法用于拷贝输入流到文件,copy(Path path,OutputStream out)该方法用于拷贝文件到输出流

  • 移动文件或目录

    我们能使用Move(Path path1,Path path2,CopyOption[] option)方法来移动文件或目录,如果目标文件已经存在,是否抛出异常与传递进来的CopyOptin标志有关,空目录和包含文件的目录都可以用该方法来进行移动,只是

    包含文件的目录移动后不再包含文件

StandardCopyOption参数的含义如下:

REPLACE_EXISTING: 该选项表示目标文件如果存在继续进行移动并替换,如果移动的是符号链接(Symbolic link),链接会被替换到指向原目标。

ATOMIC_MOVE:该选项顾名思义,就是操作要么正确完成,要么失败,不可能部分完成。

import static java.nio.file.StandardCopyOption.*;

…...

Files.move(source, target, REPLACE_EXISTING);

下一篇文章我们将学习元数据管理(manageing metadata)

你可能感兴趣的:(nio)