我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Java怎么删除文件或文件夹

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Java怎么删除文件或文件夹

本篇内容主要讲解“Java怎么删除文件或文件夹”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java怎么删除文件或文件夹”吧!

    删除文件或文件夹的四种基础方法

    下面的四个方法都可以删除文件或文件夹。

    它们的共同点是:

    当文件夹中包含子文件的时候都会删除失败,也就是说这四个方法只能删除空文件夹。

    //delete是立即执行删除,而deleteOnExit是程序退出虚拟机时才会删除。

    File类的delete()

    • File类的deleteOnExit():当虚拟机终止时,删除File对象表示的文件或目录,如果表示的是目录,需要保证目录是空的,否则无法删除,无返回值。

    • Files.delete(Path path):删除位于作为参数传递的路径上的文件。对于其他文件系统操作,此方法可能不是原子的。如果文件是符号链接,则将删除符号链接本身而不是链接的最终目标。如果文件是目录,则此方法仅在目录为空时才删除该文件。

    Files.deleteIfExists(Path path)

    需要注意的是:

    传统IO中的File类和NIO中的Path类既可以代表文件,也可以代表文件夹。

    上面的四个方法简单对比
    -说明成功的返回值是否能判别文件夹不存在导致失败是否能判别文件夹不为空导致失败
    File类的delete()传统IOtrue不能(返回false)不能(返回false)
    File类的deleteOnExit()传统IO,这是个坑,避免使用void不能,但不存在就不会去执行删除不能(返回void)
    Files.delete(Path path)NIO,推荐使用voidNoSuchFileExceptionDirectoryNotEmptyException
    Files.deleteIfExists(Path path)NIOtruefalseDirectoryNotEmptyException
    File.delete()和Files.delete(Path path)对比
    //删除暂存的pdfFile file =new File(pdfFilename);file.delete();Path path4 = Paths.get(pdfFilename);Files.delete(path4);

    区别:

    --File.delete()Files.delete(Path path)
    JDKJDK1.0JDK1.7
    来源java.io.File对象的实例方法java.nio.file.Files类的静态方法
    参数无参java.nio.file.Path
    返回值booleanvoid
    异常声明无声明声明抛出java.io.IOException
    文件不存在不抛异常,返回false抛java.nio.file.NoSuchFileException
    删除非空目录无法删除,返回false无法删除,抛java.nio.file.DirectoryNotEmptyException
    删除被占用文件无法删除,返回false无法删除,抛java.nio.file.FileSystemException
    其他原因文件无法删除不抛异常,返回false抛java.io.IOException的具体子类

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

    先造数据

    private  void createMoreFiles() throws IOException {   Files.createDirectories(Paths.get("D:\data\test1\test2\test3\test4\test5\"));   Files.write(Paths.get("D:\data\test1\test2\test2.log"), "hello".getBytes());   Files.write(Paths.get("D:\data\test1\test2\test3\test3.log"), "hello".getBytes());}
    walkFileTree与FileVisitor

    使用walkFileTree方法遍历整个文件目录树,使用FileVisitor处理遍历出来的每一项文件或文件夹

    • FileVisitor的visitFile方法用来处理遍历结果中的“文件”,所以我们可以在这个方法里面删除文件

    • FileVisitor的postVisitDirectory方法,注意方法中的“post”表示“后去做……”的意思,所以用来文件都处理完成之后再去处理文件夹,所以使用这个方法删除文件夹就可以有效避免文件夹内容不为空的异常,因为

    在去删除文件夹之前,该文件夹里面的文件已经被删除了。

    @Testvoid testDeleteFileDir5() throws IOException {   createMoreFiles();   Path path = Paths.get("D:\data\test1\test2");   Files.walkFileTree(path,      new SimpleFileVisitor<Path>() {         // 先去遍历删除文件         @Override         public FileVisitResult visitFile(Path file,                                  BasicFileAttributes attrs) throws IOException {            Files.delete(file);            System.out.printf("文件被删除 : %s%n", file);            return FileVisitResult.CONTINUE;         }         // 再去遍历删除目录         @Override         public FileVisitResult postVisitDirectory(Path dir,                                         IOException exc) throws IOException {            Files.delete(dir);            System.out.printf("文件夹被删除: %s%n", dir);            return FileVisitResult.CONTINUE;         }      }   );}

    下面的输出体现了文件的删除顺序

    文件被删除 : D:\data\test1\test2\test2.log

    文件被删除 : D:\data\test1\test2\test3\test3.log

    文件夹被删除 : D:\data\test1\test2\test3\test4\test5

    文件夹被删除 : D:\data\test1\test2\test3\test4

    文件夹被删除 : D:\data\test1\test2\test3

    文件夹被删除 : D:\data\test1\test2

    我们既然可以遍历出文件夹或者文件,我们就可以在处理的过程中进行过滤。比如:

    按文件名删除文件或文件夹,参数Path里面含有文件或文件夹名称

    按文件创建时间、修改时间、文件大小等信息去删除文件,参数BasicFileAttributes 里面包含了这些文件信息。

    Files.walk

    如果你对Stream流语法不太熟悉的话,这种方法稍微难理解一点,但是说实话也非常简单。

    使用Files.walk遍历文件夹(包含子文件夹及子其文件),遍历结果是一个Stream

    对每一个遍历出来的结果进行处理,调用Files.delete就可以了。

    @Testvoid testDeleteFileDir6() throws IOException {   createMoreFiles();   Path path = Paths.get("D:\data\test1\test2");   try (Stream<Path> walk = Files.walk(path)) {      walk.sorted(Comparator.reverseOrder())         .forEach(DeleteFileDir::deleteDirectoryStream);   }}private static void deleteDirectoryStream(Path path) {   try {      Files.delete(path);      System.out.printf("删除文件成功:%s%n",path.toString());   } catch (IOException e) {      System.err.printf("无法删除的路径 %s%n%s", path, e);   }}

    问题:怎么能做到先去删除文件,再去删除文件夹?

    利用的是字符串的排序规则,从字符串排序规则上讲,“D:\data\test1\test2”一定排在“D:\data\test1\test2\test2.log”的前面。

    所以我们使用“sorted(Comparator.reverseOrder())”把Stream顺序颠倒一下,就达到了先删除文件,再删除文件夹的目的。

    下面的输出,是最终执行结果的删除顺序。

    删除文件成功:D:\data\test1\test2\test3\test4\test5

    删除文件成功:D:\data\test1\test2\test3\test4

    删除文件成功:D:\data\test1\test2\test3\test3.log

    删除文件成功:D:\data\test1\test2\test3

    删除文件成功:D:\data\test1\test2\test2.log

    删除文件成功:D:\data\test1\test2

    传统IO-递归遍历删除文件夹

    传统的通过递归去删除文件或文件夹的方法就比较经典了

    //传统IO递归删除@Testvoid testDeleteFileDir7() throws IOException {   createMoreFiles();   File file = new File("D:\data\test1\test2");   deleteDirectoryLegacyIO(file);}private void deleteDirectoryLegacyIO(File file) {   File[] list = file.listFiles();  //无法做到list多层文件夹数据   if (list != null) {      for (File temp : list) {     //先去递归删除子文件夹及子文件         deleteDirectoryLegacyIO(temp);   //注意这里是递归调用      }   }   if (file.delete()) {     //再删除自己本身的文件夹      System.out.printf("删除成功 : %s%n", file);   } else {      System.err.printf("删除失败 : %s%n", file);   }}

    需要注意的是:

    listFiles()方法只能列出文件夹下面的一层文件或文件夹,不能列出子文件夹及其子文件。

    先去递归删除子文件夹,再去删除文件夹自己本身。

    到此,相信大家对“Java怎么删除文件或文件夹”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    Java怎么删除文件或文件夹

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档

    猜你喜欢

    Java怎么删除文件或文件夹

    本篇内容主要讲解“Java怎么删除文件或文件夹”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java怎么删除文件或文件夹”吧!删除文件或文件夹的四种基础方法下面的四个方法都可以删除文件或文件夹。
    2023-07-06

    在OneDrive中删除文件或文件夹

    要在OneDrive中删除文件或文件夹,请按照以下步骤操作:1. 打开OneDrive应用或访问OneDrive网站(https://onedrive.live.com)。2. 导航到你要删除的文件或文件夹所在的位置。3. 对于文件,可以直
    2023-09-13

    java io文件操作删除文件或文件夹的方法

    这篇文章主要讲解了“java io文件操作删除文件或文件夹的方法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“java io文件操作删除文件或文件夹的方法”吧!一、删除文件或文件夹的四种基础
    2023-06-29

    java怎么删除文件夹及其子文件

    在Java中,可以使用递归函数来删除文件夹及其子文件。```javaimport java.io.File;public class DeleteFolder {public static void main(String[] args)
    2023-08-11

    Java中删除文件或文件夹的方法有哪些

    本篇内容介绍了“Java中删除文件或文件夹的方法有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!删除文件或文件夹的四种基础方法下面的四个
    2023-07-06

    nodejs怎么清空/删除指定文件夹下面所有文件或文件夹

    这篇“nodejs怎么清空/删除指定文件夹下面所有文件或文件夹”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“nodejs怎么
    2023-07-06

    删除文件或文件夹的多种方法

    删除文件或文件夹的多种方法 当杂乱无章的文件或文件夹造成磁盘空间无谓消耗时,您便可利用由Windows XP提供的多种方法将不再需要的文件或文件夹删除掉。您可在Windows资源管理器中利用以下任意一种方法执行删除操作:右键单击需要删除的文
    2023-05-24

    C#如何删除指定文件或文件夹

    这篇文章主要介绍了C#如何删除指定文件或文件夹,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-28

    mfc怎么删除文件夹和文件

    在MFC中,可以使用CFile类和CFileFind类来删除文件和文件夹。删除文件:1. 使用CFile类的Remove函数来删除文件。```cppCFile::Remove(LPCTSTR lpszFileName);```示例:```c
    2023-10-10

    Java中删除文件或文件夹的几种方法总结

    这篇文章主要介绍了Java中删除文件或文件夹的几种方法总结,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-15

    在OneDrive中还原已删除文件或文件夹

    在OneDrive中,您可以还原已删除的文件或文件夹。下面是操作步骤:1. 打开OneDrive网页版,登录您的账户。2. 在左侧导航栏中,点击“回收站”选项。3. 在回收站中,您将看到您之前删除的文件和文件夹的列表。4. 选择您要还原的文
    2023-09-13

    ubuntu怎么删除文件夹

    要删除Ubuntu中的文件夹,可以使用命令行或图形界面两种方法。方法1:使用命令行1. 打开终端。2. 使用`cd`命令切换到包含要删除文件夹的目录。例如,要删除名为`folder`的文件夹,可以使用命令`cd /path/to/folde
    2023-09-07

    编程热搜

    • Python 学习之路 - Python
      一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
      Python 学习之路 - Python
    • chatgpt的中文全称是什么
      chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
      chatgpt的中文全称是什么
    • C/C++中extern函数使用详解
    • C/C++可变参数的使用
      可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
      C/C++可变参数的使用
    • css样式文件该放在哪里
    • php中数组下标必须是连续的吗
    • Python 3 教程
      Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
      Python 3 教程
    • Python pip包管理
      一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
      Python pip包管理
    • ubuntu如何重新编译内核
    • 改善Java代码之慎用java动态编译

    目录