Java NIO.2 —— 文件或目录删除操作
2015-10-29 10:42
162 查看
文件删除
删除单个文件的操作很简单,如果要删除一个目录树的话,需要实现
在删除一个目录之前,要先删除里面的文件。
因为只有在目录为空的情况下才可以删除,所以建议在
如果文件不允许访问,你可以根据自己的决定使用
删除过程可以跟踪符号链接文件,但是这不是一个可取的方式。因为符号链接可能指向超过删除域之外的文件。如果你能确认这种情况不会发生,或是还有其他约束条件阻止此情况发生,那么你可以跟踪符号链接文件。
下面的程序用来删除
删除单个文件的操作很简单,如果要删除一个目录树的话,需要实现
FileVisitor接口然后递归地调用
delete()或
deleteIfExists()方法。在看代码之前,需要注意一下问题。
在删除一个目录之前,要先删除里面的文件。
visitFile()方式是执行删除每个文件最好的方式。
因为只有在目录为空的情况下才可以删除,所以建议在
postVisitDirectory()方法中删除目录操作。
如果文件不允许访问,你可以根据自己的决定使用
visitFileFailed()方法来返回
FileVisitResult.CONTINUE或
TERMINATE。
删除过程可以跟踪符号链接文件,但是这不是一个可取的方式。因为符号链接可能指向超过删除域之外的文件。如果你能确认这种情况不会发生,或是还有其他约束条件阻止此情况发生,那么你可以跟踪符号链接文件。
下面的程序用来删除
C:\rafaelnadal目录下所有的目录和文件。
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); } }
相关文章推荐
- Java反射机制
- java之静态初始化块
- JVM执行Java程序的过程中管理的内存空间
- Java:类中代码的执行顺序
- Java实现常见的7种排序算法
- Java中用JXL导出Excel代码详解
- hadoop学习笔记之<用eclipse开发>
- Java线程之CompletionService
- Java中导入、导出excel
- java之静态方法
- java实现链表和栈
- Java中的线程同步及线程死锁复习
- java 算法40题
- SSM框架——详细整合教程(Spring+SpringMVC+MyBatis)
- Spring中@Scheduled注解实现方法的任务调度
- springmvc4+hibernate4+activiti5.18(Maven)
- 通过Java代码实现手机号归属地查询
- Java基础 Day11 Exception
- java.util.regex包中类Pattern 正则表达式的构造摘要(一)
- 我的 Java 后端书架 (2016 年暖冬版)