如果要删除单个文件,可以直接调用 delete() 或 deleteIfExists() 方法,它们会将文件从文件系统中删除。如果要删除目录树,则是通过 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);
}
}
文章来源:
http://www.aptusource.org/2014/04/nio-2-writing-a-file-delete-application/
分享到:
相关推荐
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
ftp4j是一个FTP客户端Java类库,实现了FTP客户端应具有的大部分功能文件(包括上传和下 载),浏览远程FTP服务器上的目录和文件,创建、删除、重命,移动远程目录和文件。ftp4j提供多种方式连接到远程FTP服务器包括...
3. 学习编写第一个Java程序——"Hello, World!",理解 HelloWorld 程序背后的原理。 第二天:Java语法基础 1. 掌握Java的基本数据类型,包括整型、浮点型、字符型和布尔型。 2. 学习变量的声明、初始化和使用,理解...
Java编程语言自1995年发布以来,一直保持着旺盛的生命力,广泛应用于企业级应用、移动应用(尤其是Android平台)以及互联网后端服务。"java精通+开发案例 经典经典总结"这个主题涵盖了Java学习的核心内容和实战经验...
│ 淘淘商城第三天笔记.docx │ ├─04.第四天 │ 01.第三天内容复习.avi │ 02.课程计划.avi │ 03.富文本编辑器的使用.avi │ 04.商品添加功能-分析.avi │ 05.商品添加功能实现.avi │ 06.规格参数介绍及实现...
- 第一个字符不能是数字。 - 不能使用关键字或保留字。 - 区分大小写。 **5. instanceof关键字的作用** 用于判断一个对象是否为某个类或其子类的实例。 **6. Java自动装箱与拆箱** - **装箱**:将基本类型转换为...
例如,你可以使用`new File("path")`创建一个File对象,然后调用`exists()`检查文件是否存在,`mkdirs()`创建多级目录,`delete()`删除文件或目录。 四、FileInputStream和FileOutputStream 这两个类分别用于读写...
《疯狂JAVA讲义》是一本深受...这个压缩包中的每一个子文件都是一个学习点,通过实际运行和修改代码,你可以加深对Java编程的理解,提高编程技能。无论你是Java新手还是希望巩固基础,这份资源都将是你宝贵的参考资料。
Java提供了`java.nio.file.FileSystemWatcher`或第三方库如Apache Commons IO的`FileAlterationObserver`,用于监听文件系统的变动,并在文件创建、修改或删除时触发相应事件。 3. **事件处理**:当检测到文件活动...