文章目录

  • 一、JAVA删除文件或者空文件夹的四种基本方法
    • File类的delete()
    • File类的deleteOnExit()
    • Files类的delete(Path path)
    • Files类的deleteIfExists(Path path)
    • 总结
  • 二、如何删除整个目录或者目录中的部分文件
    • 使用FileVistor遍历文件和目录
    • Files.walkFileTree删除指定文件夹所有文件(代码演示)
  • 总结

一、JAVA删除文件或者空文件夹的四种基本方法

JAVA提供了大量的类来操作IO流,采用装饰者模式对IO的操作进行层层增强。File类在JAVA中不仅代表文件还代表目录的意思。File能够新建、删除、重命名文件和目录。但是File类功能比较局限,在JAVA 7中新增了java.nio.file包,其中新增了Path、Paths、Files等类用于弥补不足。

File类的delete()

File类的delete方法用于删除文件或者目录,如果删除成功则会返回true,否则返回false。它无法判断文件是因为不存在而返回的false,,还是删除文件失败而返回的false(文件正在被使用)。

File类的deleteOnExit()

File类的deleteOnExit()方法并不会返回任何信息,以至于我们无法判断文件状态(是否被删除),因此我们应该避免使用这个方法。

Files类的delete(Path path)

Files这个类是JAVA 7引入用于操作文件的工具类,Files.delete方法如果删除文件成功不会返回任何信息,如果文件不存在则会抛出java.nio.file.NoSuchFileException异常,如果操作删除的是一个不为空的目录,则会抛出java.nio.file.DirectoryNotEmptyException异常。推荐使用

Files类的deleteIfExists(Path path)

Files.deleteIfExists方法如果文件删除成功则返回true,如果文件不存在则返回false。如果删除的是一个不为空的目录则抛出java.nio.file.DirectoryNotEmptyException异常。推荐使用

总结

由上面的总结可以看出,传统IO方法删除文件或文件夹,在删除失败的时候,最多返回一个false。通过这个false无法发掘删除失败的具体原因,是因为文件本身不存在删除失败?还是文件正在被使用而删除失败?NIO 的方法在这一点上,就做的比较好,删除成功或失败都有具体的返回值或者异常信息,这样有利于我们在删除文件或文件夹的时候更好的做程序的异常处理。

二、如何删除整个目录或者目录中的部分文件

在演示如何删除整个目录或者目录中部分文件时,让我们先谈论Files中的walkFileTree方法和FileVisitor接口。

使用FileVistor遍历文件和目录

在传统的JAVA IO操作中,要程序遍历指定目录下所有文件和子目录,一般采用递归进行遍历,这种方式不仅复杂而且灵活性低。因此JAVA 7提供了Files工具类来帮助我们更好的便利文件和子目录。Files类提供了 walkFileTree方法来遍历文件和子目录。

这两个方法都需要FileVistor参数,FileVisitor表示文件访问器,第一个参数Path表示开始遍历的文件路径,int参数 表示遍历的层数。walkFileTree方法会自动遍历Path路径下的所有文件和子目录。遍历文件和子目录都会触发FileVisitor中的对应方法。
FileVisitor中定义了四个方法:

//访问子目录之前触发该方法
FileVisitResult postVisitDirectory(T var1, IOException var2) throws IOException;
//访问子目录后触发该方法
FileVisitResult preVisitDirectory(T var1, BasicFileAttributes var2) throws IOException;
//访问file文件时触发该方法
FileVisitResult visitFile(T var1, BasicFileAttributes var2) throws IOException;
//访问file文件失败时触发该方法
FileVisitResult visitFileFailed(T var1, IOException var2) throws IOException;

上面四个方法都会返回一个FileVisitResult对象,用于表示访问后的行为,FileVisitResult定义了四种行为:

public enum FileVisitResult {CONTINUE, 表示继续访问TERMINATE, 继续访问,但是不访问该文件或者该目录的兄弟文件或目录SKIP_SUBTREE,继续访问,但是不再访问该文件或者该目录的子目录SKIP_SIBLINGS; 终止访问private FileVisitResult() {}
}

在实际编程运用中,可以通过继承SimpleFileVisitor来实现自己的文件访问器,或者重写SimpleFileVisitor类中的方法来实现自己的需求。

Files.walkFileTree删除指定文件夹所有文件(代码演示)

所提供的工具类是删除指定文件或目录下所有子目录或者文件。如果只删除部分文件,请重写visitFile方法规则。代码如下:

/*** @Author: Greyfus* @Create: 2022-06-26 19:24* @Version:* @Description:*/
package com.file.utils;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;public class FileUtils {private static final Logger LOGGER = LoggerFactory.getLogger(FileUtils.class);/*** 删除指定文件夹下文件** @param filePath*/public static void deleteFolders(String filePath) {Path path = Paths.get(filePath);try {Files.walkFileTree(path, new SimpleFileVisitor<Path>() {@Overridepublic FileVisitResult visitFile(Path file, BasicFileAttributes attributes) throws IOException {Files.delete(file);LOGGER.info("删除文件: {}", file);return FileVisitResult.CONTINUE;}@Overridepublic FileVisitResult postVisitDirectory(Path dir,IOException exc) throws IOException {Files.delete(dir);LOGGER.info("文件夹被删除: {}", dir);return FileVisitResult.CONTINUE;}});} catch (IOException e) {e.printStackTrace();}}
}

总结

Files提供了大量的文件操作方法,可以满足大多数文件操作场景,本文并没有列出如何删除指定文件下部分文件或者目录的操作,其实只需要重写visitFile方法按自己的规则编写就行。如果有疑问或者更好的意见欢迎留言。

JAVA删除文件或者文件夹相关推荐

  1. java删除相对路径文件夹_Java IO,io,文件操作,删除文件,删除文件夹,获取文件父级目录...

    Java IO,io,文件操作,删除文件,删除文件夹,获取文件父级目录 这里先简单的贴下常用的方法: File.separator //当前系统文件分隔符 File.pathSeparator// F ...

  2. java删除指定的文件夹_java脚本删除指定目录下的所有指定名称的文件夹

    前阵子出差,经常拷贝项目源码,源码里面总是包括.svn文件夹,使得拷贝起来很麻烦,而且文件大了很多,所以自己编写小程序删除,基于同事也经常让我传这段代码,干脆制作成可执行文件.并且是通用的删除小程序. ...

  3. java 删除压缩zip文件_从ZIP存档中删除文件,而无需在Java或Python中解压缩 - java...

    从ZIP存档中删除文件,而无需使用Java(首选)或Python解压缩 你好 我使用包含数百个高度压缩的文本文件的大型ZIP文件.解压缩ZIP文件时,可能要花一些时间,并且很容易消耗多达20 GB的磁 ...

  4. java删除服务器上文件

    /** * 删除服务上的文件 * @author Master.Pan * @date 2017年11月20日 上午11:06:48 * @param filePath 路径 * @param fil ...

  5. Java删除Linux文件

    前言 提示:运行的系统需要不断上传新的文件到linux服务器,当系统删除该文件记录时,并没有同步删除linux服务器文件,这样就导致linux服务器越来越臃肿,内容占用会越来越大.所以在系统删除某个文 ...

  6. java file 操作之创建、删除文件及文件夹

    本文章向大家讲解java文件的基本操作,包括java创建文件和文件夹.java删除文件.java获取指定目录的全部文件.java判断指定路径是否为目录以及java搜索指定目录的全部内容等.请看下面实例 ...

  7. 一个java删除文件夹的小方法

    java删除文件夹都是从里向外删除,使用递归的方法. public class IO_FILEdemo09 {public static void main(String[] args) {// TO ...

  8. Java删除指定文件夹下的文件和目录

    Java删除指定文件夹下的文件和目录 import java.io.File;public class TestFile {public static void main(String[] args) ...

  9. Java删除文件夹和文件

    以前在javaeye看到过关于Java操作文件的一篇文章,写的很好,但找了半天也没找到,就把找到底几篇文章整理一下,做个总结,算是一个学习备份-- 1,验证传入路径是否为正确的路径名(Windows系 ...

  10. java : enum、创建文件和文件夹、删除文件和文件夹、获得项目绝对路径、写入数据到excel中、java代码中两种路径符号写法、读取、写入text文件...

    java : enum http://www.cnblogs.com/hyl8218/p/5088287.html 创建文件和文件夹.删除文件和文件夹 http://www.cnblogs.com/m ...

最新文章

  1. 转载:用 Tomcat 和 Eclipse 开发 Web 应用程序
  2. python 删除列表中的指定元素
  3. onenote怎么同步到电脑_详解onenote保存与同步④:本地笔记奇葩的丢失经历
  4. 北斗导航 | Satellite Communications Toolbox——MATLAB2021a卫星通信工具箱(附代码)
  5. js window.onlload 自遐想
  6. 计算机博士论文答谢,这篇博士论文《致谢》刷屏,句句扎心
  7. 1.1 STL 概述
  8. 注意地方hadoop中的pi值计算
  9. pytorch总结(一)torch.nn模块使用详解
  10. gulp安装报错Local version: Unknown
  11. 用“企业架构”方法指导信息化规划
  12. 被称为“圣经”的《计算机体系结构》
  13. php中验证码如何实现登录验证,php登录验证码怎么实现
  14. openxml 给word添加table,复制样式和字体
  15. tecplot360 2015 R1读abaqus后处理文件
  16. Java项目名前有红色感叹号怎么解决
  17. 基础操作案例:ArcGIS PRO基础教程(二)
  18. L2-040 哲哲打游戏 (25 分) 模拟
  19. 安装专业版Pycharm并破解激活
  20. 2004手机游戏年终点评

热门文章

  1. 2级c语言题库及答案,计算机二级c语言考试题库及答案
  2. CAD2016软件安装教程
  3. java开发个人简历模板_java程序开发个人简历模板
  4. python输出小数_python输出小数
  5. 计算机二级Java笔记/重难点易错点总结(按章节归纳整理)
  6. 宋红康Java基础笔记
  7. 解读Depth Map Prediction from a Single Image using a Multi-Scale Deep Network (2)
  8. android 百度 tts,百度语音TTS. android 启动时闪退
  9. c语言程序计算器清屏功能,C语言实现计算器功能
  10. linux备份数据库