zoukankan      html  css  js  c++  java
  • Java NIO.2 —— 文件或目录删除操作

    文件删除

      删除单个文件的操作很简单,如果要删除一个目录树的话,需要实现FileVisitor 接口然后递归地调用delete()deleteIfExists()方法。在看代码之前,需要注意一下问题。

    • 在删除一个目录之前,要先删除里面的文件。
    • visitFile()方式是执行删除每个文件最好的方式。
    • 因为只有在目录为空的情况下才可以删除,所以建议在postVisitDirectory()方法中删除目录操作。
    • 如果文件不允许访问,你可以根据自己的决定使用visitFileFailed()方法来返回FileVisitResult.CONTINUETERMINATE
    • 删除过程可以跟踪符号链接文件,但是这不是一个可取的方式。因为符号链接可能指向超过删除域之外的文件。如果你能确认这种情况不会发生,或是还有其他约束条件阻止此情况发生,那么你可以跟踪符号链接文件。

      下面的程序用来删除C: afaelnadal目录下所有的目录和文件。

    import java.io.IOException;
     import java.nio.file.FileVisitOption;
     import java.nio.file.FileVisitResult;
     import java.nio.file.FileVisitor;
     import java.nio.file.Files;
     import java.nio.file.Path;
     import java.nio.file.Paths;
     import java.nio.file.attribute.BasicFileAttributes;
     import java.util.EnumSet;
     
    class DeleteDirectory implements FileVisitor {    
     
     boolean deleteFileByFile(Path file) throws IOException {
         return Files.deleteIfExists(file);
      }
     
     @Override
      public FileVisitResult postVisitDirectory(Object dir, IOException exc) 
                                                                      throws IOException {
     
        if (exc == null) {
             System.out.println("Visited: " + (Path) dir);
             boolean success = deleteFileByFile((Path) dir);
     
            if (success) {
                  System.out.println("Deleted: " + (Path) dir);
             } else {
                   System.out.println("Not deleted: " + (Path) dir);
             }
         } else {
             throw exc;
         }
         return FileVisitResult.CONTINUE;
      }
     
     @Override
      public FileVisitResult preVisitDirectory(Object dir, BasicFileAttributes attrs) 
                                                                      throws IOException {
        return FileVisitResult.CONTINUE; 
     }
     
     @Override
      public FileVisitResult visitFile(Object file, BasicFileAttributes attrs) 
                                                                      throws IOException {
        boolean success = deleteFileByFile((Path) file);
     
       if (success) {
             System.out.println("Deleted: " + (Path) file);
        } else {
             System.out.println("Not deleted: " + (Path) file);
        }
     
       return FileVisitResult.CONTINUE;
      }
     
     @Override
      public FileVisitResult visitFileFailed(Object file, IOException exc) 
                                                                      throws IOException {
        //report an error if necessary
     
       return FileVisitResult.CONTINUE;
      }
     }
     
    class Main {
     
     public static void main(String[] args) throws IOException {
     
       Path directory = Paths.get("C:/rafaelnadal");
        DeleteDirectory walk = new DeleteDirectory();
        EnumSet opts = EnumSet.of(FileVisitOption.FOLLOW_LINKS);
     
       Files.walkFileTree(directory, opts, Integer.MAX_VALUE, walk);       
       }
     }
  • 相关阅读:
    卷积神经网络-目标探测-笔记
    卷积神经网络-目标分类简述
    深度学习-卷积神经网络的发展-笔记
    深度学习-卷积神经网络笔记
    深度学习-传统神经网络
    深度学习-初识深度学习-笔记
    数据结构-链式队列-C++
    查看线程的id名字正在运行的线程数量[getName()--ident--enumerate--activeCount]--线程池--协程(gevent)--优先级队列(LifoQueue)
    线程-线程的(锁、死锁现象、守护线程)
    ftp(网络传输)--BaseRequesHandler(tcp协议下的多个客户端连接)--urandom(随机生成字节字符串)--hmac(类似于hashlib)
  • 原文地址:https://www.cnblogs.com/IcanFixIt/p/4919702.html
Copyright © 2011-2022 走看看