文件删除

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

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

  下面的程序用来删除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 NIO.2 —— 文件或目录删除操作的更多相关文章

  1. Java NIO.2 —— 文件或目录拷贝操作

    拷贝整个文件树是可以递归每个目录和文件调用 Files.copy()方法.在使用的时候有一下注意事项. 在往目录拷贝文件之前,首先要保证目录已经存在.拷贝源目录(不论是否为空)都会生成目标目录.整个任 ...

  2. Java NIO.2 —— 文件或目录移动操作

    移动文件树是复制和删除的文件树的结合.实际上,有两种方式来完成文件的移动.一种是使用Files.move(), Files.copy(), 和Files.delete() 这三个方法:另一种是只使用F ...

  3. Perl文件、目录常用操作

    注意,这些操作的对象是文件名(相对路径/绝对路径),而非文件/目录句柄,句柄只是perl和文件系统中文件的关联通道,而非实体对象. 创建文件 在unix类操作系统中有一个touch命令可以非常方便的创 ...

  4. Java中移动文件或目录的方法盘点

    本文不再更新,可能存在内容过时的情况,实时更新请移步原文地址:Java中移动文件或目录的方法盘点: import org.apache.commons.io.FileUtils; import jav ...

  5. nohup: 无法运行命令"java": 没有那个文件或目录

    问题 在一个Linux服务器上有shell 脚本如下: nohup java -jar test.jar >> ./nohup.out 2>&1 & 直接执行脚本 s ...

  6. Starting Jenkins bash: /usr/bin/java: 没有那个文件或目录

    [root@localhost /]# systemctl status jenkins.service ● jenkins.service - LSB: Jenkins Automation Ser ...

  7. jenkins启动失败 jenkins.service failed Starting Jenkins bash: /usr/bin/java: 没有那个文件或目录

    失败的原因 ● jenkins.service - LSB: Jenkins Automation Server Loaded: loaded (/etc/rc.d/init.d/jenkins; b ...

  8. Java7 新特性 —— java.nio.file 文件操作

    本文部分摘自 On Java 8 自 Java7 开始,Java 终于简化了文件读写的基本操作,新增了 java.nio.file 库,通过与 Java8 新增的 stream 结合可以使得文件操作变 ...

  9. Java——文件及目录File操作

    API file.listFiles(); //列出目录下所有文件及子目录fileList[i].isFile() //判断是否为文件 fileList[i].isDirectory() //判断是否 ...

随机推荐

  1. 磁盘I/O的性能评估方法

    磁盘I/O的性能评估方法 http://blog.synology.com/blog/?p=2086 通常,我们很容易观察到数据库服务器的内存和CPU压力.但是对I/O压力没有直观的判断方法.磁盘有两 ...

  2. SQLServer中char、varchar、nchar、nvarchar的区别

    http://www.cnblogs.com/14lcj/archive/2012/07/08/2581234.html SQLServer中char.varchar.nchar.nvarchar的区 ...

  3. logback debug 日志没有信息

    可能是项目绑定的日志不是logback的jar包,而是其他包,具体可查看tomcat启动日志 log4j:WARN No appenders could be found for logger (or ...

  4. 使用Gulp

    为什么要使用Gulp 在前端开发中通常须要做,预处理语言的编译.js文件的压缩.css文件的压缩.图片的压缩等一系列工作,而使用Gulp能够自己主动化的完毕这些工作,从而提高站点的开发效率,在我的博客 ...

  5. 【LeetCode】String to Integer (atoi) 解题报告

    这道题在LeetCode OJ上难道属于Easy.可是通过率却比較低,究其原因是须要考虑的情况比較低,非常少有人一遍过吧. [题目] Implement atoi to convert a strin ...

  6. node中__dirname、__filename、process.cwd()表示的路径

    直接上结论:__dirname 表示当前文件所在的目录的绝对路径__filename 表示当前文件的绝对路径module.filename ==== __filename 等价process.cwd( ...

  7. 阿里JAVA开发面试常问问题总结2

    线程与进程 进程是可并发运行的程序在某个数据集合上的一次计算活动.也是操作系统进行资源分配和调度的基本单位. 线程是操作系统进程中能够并发运行的实体,是处理器调度和分派的基本单位. 每一个进程内可包括 ...

  8. powx-n 分治实现乘方

    题目描述 Implement pow(x, n). AC: class Solution { public: double pow(double x, int n) { && n == ...

  9. 妙用Pixel bender执行复杂运算/普通数据运算 传递Vector数组

    最近发现pixel bender有两个特殊点: 1.Input Image4,不单单可以用BitmapData来初始化,也可以用Vector.<Number>初始化. 2.ShaderJo ...

  10. Java volatile 的测试(Java代码实战-004)

    package Threads; /** * Created by xfyou 2018/5/21 16:07. */ public class VolatileTest { private stat ...