[NIO.2] 第三十五篇 编写一个文件删除应用_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > [NIO.2] 第三十五篇 编写一个文件删除应用

[NIO.2] 第三十五篇 编写一个文件删除应用

 2014/4/19 3:40:56  cucaracha  程序员俱乐部  我要评论(0)
  • 摘要:如果要删除单个文件,可以直接调用delete()或deleteIfExists()方法,它们会将文件从文件系统中删除。如果要删除目录树,则是通过FileVisitor的具体实现来递归调用delete()或deleteIfExists()方法。在开始之前,要注意以下原则:在删除目录之前,要确保目录是空的。删除文件最好在visitFile()方法中。最好在postVisitDirectory()方法中删除目录。如果文件不允许访问,那么visitFileFailed(
  • 标签:文件 一个 应用
如果要删除单个文件,可以直接调用 delete() 或 deleteIfExists() 方法,它们会将文件从文件系统中删除。如果要删除目录树,则是通过  FileVisitor 的具体实现来递归调用 delete() 或 deleteIfExists() 方法。在开始之前,要注意以下原则:

  •     在删除目录之前,要确保目录是空的。
  •     删除文件最好在 visitFile() 方法中。
  •     最好在  postVisitDirectory() 方法中删除目录。
  •     如果文件不允许访问,那么 visitFileFailed() 方法需要返回 FileVisitResult.CONTINUE 或 TERMINATE,具体返回什么由你的需求决定。
  •     caozuo.html" target="_blank">删除操作可以删除软链接的目标文件,但是如果目标文件在我们删除的目录树范围之外,那么不建议这么做。


下面的代码将递归删除整个  C:\rafaelnadal 目录:

class="java">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);        
   } 
} 


文章来源:http://www.aptusource.org/2014/04/nio-2-writing-a-file-delete-application/


发表评论
用户名: 匿名