JavaNIO.2——文件或目录删除操作

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

文件删除

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

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

importjava.io.IOException;importjava.nio.file.FileVisitOption;importjava.nio.file.FileVisitResult;importjava.nio.file.FileVisitor;importjava.nio.file.Files;importjava.nio.file.Path;importjava.nio.file.Paths;importjava.nio.file.attribute.BasicFileAttributes;importjava.util.EnumSet;classDeleteDirectoryimplementsFileVisitor {booleandeleteFileByFile(Path file)throwsIOException {returnFiles.deleteIfExists(file);

}

@OverridepublicFileVisitResult postVisitDirectory(Object dir, IOException exc)throwsIOException {if(exc ==null) {

System.out.PRintln("Visited: " +(Path) dir);booleansuccess =deleteFileByFile((Path) dir);if(success) {

System.out.println("Deleted: " +(Path) dir);

}else{

System.out.println("Not deleted: " +(Path) dir);

}

}else{throwexc;

}returnFileVisitResult.CONTINUE;

}

@OverridepublicFileVisitResult preVisitDirectory(Object dir, BasicFileAttributes attrs)throwsIOException {returnFileVisitResult.CONTINUE;

}

@OverridepublicFileVisitResult visitFile(Object file, BasicFileAttributes attrs)throwsIOException {booleansuccess =deleteFileByFile((Path) file);if(success) {

System.out.println("Deleted: " +(Path) file);

}else{

System.out.println("Not deleted: " +(Path) file);

}returnFileVisitResult.CONTINUE;

}

@OverridepublicFileVisitResult visitFileFailed(Object file, IOException exc)throwsIOException {//report an error if necessaryreturnFileVisitResult.CONTINUE;

}

}classMain {publicstaticvoidmain(String[] args)throwsIOException {

Path directory= Paths.get("C:/rafaelnadal");

DeleteDirectory walk=newDeleteDirectory();

EnumSet opts=EnumSet.of(FileVisitOption.FOLLOW_LINKS);

Files.walkFileTree(directory, opts, Integer.MAX_VALUE, walk);

}

}

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航