Java SE 7 新特性之文件操作(4)- 删除、拷贝和移动文件

转自 开发者的天空

 

删除操作
通过Path 类,我们可以删除文件、目录或符号链接。要注意 的是当我们删除符号链接时,其指向的目的目录或文件不会被删除。当要删除一个目录时,该目录必须为空,否则会失败。
Path类提供了两个删除方法。第一个是delete方法。Delete方法会直接删除文件或目录,如果删除失败则会抛出异常。例如如果要删除的文件不存 在,则会抛出NoSuchFileException。程序员 可以catch这些异常并进行相应的处理。

    try {
        path.delete();
    } 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);
    }

    另 外一个方法是deleteIfExists。这个方法同样会删除文件或目录,和delete方法唯一不同的是如果文件不存在,这个方法不会抛出异常。

    拷贝操作
    Path类提供了拷贝文件或目录的方法,就是copyTo方法。(以前要copy文件只能够自己写程序完成哦!)。在进行拷贝的时候,我们可以指定如果目 标文件或目录已经存在时怎么处理;如果设置了REPLACE_EXISTING,则会覆盖已有的文件或目录;如果没有设置 REPLACE_EXISTING,那么拷贝操作会失败。
    要注意的是拷贝目录时,目录中的内容并没有被拷贝过去,新生成的目录会是一个空目录。要想将目录中的内容一起拷贝过去,只有自己编程了。
    在拷贝符号链接时,默认的行为是拷贝符号链接指向的目的文件或目录。如果需要拷贝符号链接本身,需要指定NOFOLLOW_LINKS或 REPLACE_EXISTING选项。
    CopyTo方法接受CopyOption类型的varargs。CopyOption是一个接口,目前有两个实现 类:StandardCopyOption和LinkOption。CopyTo方法能够支持的选项有:
        * REPLACE_EXISTING – 当要拷贝的是文件是,如果目标文件已经存在,则覆盖目标文件。如果要拷贝的是目录,当目标目录已经存在时,如果目标目录为空,覆盖目标目录;如果目标目录 不为空,抛出FileAlreadyExistsException。如果要拷贝的是符号链接,那么拷贝符号链接本身。
        * COPY_ATTRIBUTES – 连文件或目录的属性一起拷贝。不同的文件系统和平台支持不同的文件属性,但是所有的文件系统和平台都支持最后修改时间这个属性。
        * NOFOLLOW_LINKS – 如果要拷贝的是符号链接,直接拷贝符号链接本身。
    下面是使用copyTo的代码例子:

        import static java.nio.file.StandardCopyOption.*;
        ...
        try {
            path.copyTo(newPath, REPLACE_EXISTING, COPY_ATTRIBUTES);
        } catch (IOException x) {
            //Logic for error condition...
            System.err.println(x);
            return;
        }

      移动操作
      Path还提供了moveTo方法来移动文件或目录。如果没有设置REPLACE_EXISTING选项,那么当目标文件或目录存在时,操作会失败。
      空目录能够被移动,但是如果目录不为空,是否能够移动目录要取决于是否能够不移动目录的内容。例如在Windows系统下,如果是同一个硬盘分区内的移 动,就可以成功,但是如果是不同硬盘分区之间的移动,就会失败,会抛出FileSystemException异常。同时要注意的是,目的目录的父目录一 定要存在,否则会抛出NoSuchFileException。例如将c:/temp/test移动到c:/save/test,如果c:/save目录 不存在,则会抛出异常。
      MoveTo方法也接受可变数量的参数,其支持的选项有:
      REPLACE_EXISTING – 覆盖已经存在的文件或目录。如果目标文件/目录是一个符号链接,那么该链接会被覆盖,但是起指向的文件或目录不会受到影响。    * ATOMIC_MOVE – 移动操作是一个原子操作。如果文件系统不支持移动的原子操作,会抛出异常。原子操作能够保证当你移动一个文件到一个目录中时,监视该目录的进程得到的是一 个完整的文件。
      下面是使用moveTo方法的例子

          import static java.nio.file.StandardCopyOption.*;
          ...
          try {
              path.moveTo(newPath, REPLACE_EXISTING);
          } catch (IOException x) {
              // Logic for error condition...
              System.err.println(x);
              return;
          }
        • 0
          点赞
        • 2
          收藏
          觉得还不错? 一键收藏
        • 0
          评论

        “相关推荐”对你有帮助么?

        • 非常没帮助
        • 没帮助
        • 一般
        • 有帮助
        • 非常有帮助
        提交
        评论
        添加红包

        请填写红包祝福语或标题

        红包个数最小为10个

        红包金额最低5元

        当前余额3.43前往充值 >
        需支付:10.00
        成就一亿技术人!
        领取后你会自动成为博主和红包主的粉丝 规则
        hope_wisdom
        发出的红包
        实付
        使用余额支付
        点击重新获取
        扫码支付
        钱包余额 0

        抵扣说明:

        1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
        2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

        余额充值