最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JAVA如何刪除文件或者文件夾

 更新時(shí)間:2025年01月22日 09:10:27   作者:對酒當(dāng)歌丶人生幾何  
文章介紹了Java中刪除文件和空文件夾的四種基本方法,包括File類的delete()、deleteOnExit()方法,以及Files類的delete(Path path)和deleteIfExists(Path path)方法,文章還講述了如何使用Files類的walkFileTree方法和FileVisitor接口來刪除整個(gè)目錄或目錄中的部分文件

一、JAVA刪除文件或者空文件夾的四種基本方法

JAVA提供了大量的類來操作IO流,采用裝飾者模式對IO的操作進(jìn)行層層增強(qiáng)。

File類在JAVA中不僅代表文件還代表目錄的意思。File能夠新建、刪除、重命名文件和目錄。

但是File類功能比較局限,在JAVA 7中新增了java.nio.file包,其中新增了Path、Paths、Files等類用于彌補(bǔ)不足。

File類的delete()

File類的delete方法用于刪除文件或者目錄,如果刪除成功則會(huì)返回true,否則返回false。

它無法判斷文件是因?yàn)椴淮嬖诙祷氐膄alse,,還是刪除文件失敗而返回的false(文件正在被使用)。

File類的deleteOnExit()

File類的deleteOnExit()方法并不會(huì)返回任何信息,以至于我們無法判斷文件狀態(tài)(是否被刪除),因此我們應(yīng)該避免使用這個(gè)方法。

Files類的delete(Path path)

Files這個(gè)類是JAVA 7引入用于操作文件的工具類,F(xiàn)iles.delete方法如果刪除文件成功不會(huì)返回任何信息,

如果文件不存在則會(huì)拋出java.nio.file.NoSuchFileException異常,如果操作刪除的是一個(gè)不為空的目錄,則會(huì)拋出java.nio.file.DirectoryNotEmptyException異常。推薦使用

Files類的deleteIfExists(Path path)

Files.deleteIfExists方法如果文件刪除成功則返回true,如果文件不存在則返回false。

如果刪除的是一個(gè)不為空的目錄則拋出java.nio.file.DirectoryNotEmptyException異常。推薦使用

總結(jié):

  • 由上面的總結(jié)可以看出,傳統(tǒng)IO方法刪除文件或文件夾,在刪除失敗的時(shí)候,最多返回一個(gè)false。
  • 通過這個(gè)false無法發(fā)掘刪除失敗的具體原因,是因?yàn)槲募旧聿淮嬖趧h除失?。窟€是文件正在被使用而刪除失?。?/li>
  • NIO 的方法在這一點(diǎn)上,就做的比較好,刪除成功或失敗都有具體的返回值或者異常信息,這樣有利于我們在刪除文件或文件夾的時(shí)候更好的做程序的異常處理。

二、如何刪除整個(gè)目錄或者目錄中的部分文件

在演示如何刪除整個(gè)目錄或者目錄中部分文件時(shí),讓我們先談?wù)揊iles中的walkFileTree方法和FileVisitor接口。

使用FileVistor遍歷文件和目錄

在傳統(tǒng)的JAVA IO操作中,要程序遍歷指定目錄下所有文件和子目錄,一般采用遞歸進(jìn)行遍歷,這種方式不僅復(fù)雜而且靈活性低。

因此JAVA 7提供了Files工具類來幫助我們更好的便利文件和子目錄。

Files類提供了 walkFileTree方法來遍歷文件和子目錄。

這兩個(gè)方法都需要FileVistor參數(shù),FileVisitor表示文件訪問器,第一個(gè)參數(shù)Path表示開始遍歷的文件路徑,int參數(shù) 表示遍歷的層數(shù)。

walkFileTree方法會(huì)自動(dòng)遍歷Path路徑下的所有文件和子目錄。

遍歷文件和子目錄都會(huì)觸發(fā)FileVisitor中的對應(yīng)方法。 

FileVisitor中定義了四個(gè)方法:

//訪問子目錄之前觸發(fā)該方法
FileVisitResult postVisitDirectory(T var1, IOException var2) throws IOException;
//訪問子目錄后觸發(fā)該方法
FileVisitResult preVisitDirectory(T var1, BasicFileAttributes var2) throws IOException;
//訪問file文件時(shí)觸發(fā)該方法
FileVisitResult visitFile(T var1, BasicFileAttributes var2) throws IOException;
//訪問file文件失敗時(shí)觸發(fā)該方法
FileVisitResult visitFileFailed(T var1, IOException var2) throws IOException;

上面四個(gè)方法都會(huì)返回一個(gè)FileVisitResult對象,用于表示訪問后的行為,F(xiàn)ileVisitResult定義了四種行為:

public enum FileVisitResult {
    CONTINUE, 表示繼續(xù)訪問
    TERMINATE, 繼續(xù)訪問,但是不訪問該文件或者該目錄的兄弟文件或目錄
    SKIP_SUBTREE,繼續(xù)訪問,但是不再訪問該文件或者該目錄的子目錄
    SKIP_SIBLINGS; 終止訪問

    private FileVisitResult() {
    }
}

在實(shí)際編程運(yùn)用中,可以通過繼承SimpleFileVisitor來實(shí)現(xiàn)自己的文件訪問器,或者重寫SimpleFileVisitor類中的方法來實(shí)現(xiàn)自己的需求。

Files.walkFileTree刪除指定文件夾所有文件(代碼演示)

所提供的工具類是刪除指定文件或目錄下所有子目錄或者文件。

如果只刪除部分文件,請重寫visitFile方法規(guī)則。

代碼如下:

/**
 * @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>() {
                @Override
                public FileVisitResult visitFile(Path file, BasicFileAttributes attributes) throws IOException {
                    Files.delete(file);
                    LOGGER.info("刪除文件: {}", file);
                    return FileVisitResult.CONTINUE;
                }

                @Override
                public FileVisitResult postVisitDirectory(Path dir,
                                                          IOException exc) throws IOException {
                    Files.delete(dir);
                    LOGGER.info("文件夾被刪除: {}", dir);
                    return FileVisitResult.CONTINUE;
                }
            });
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

總結(jié)

Files提供了大量的文件操作方法,可以滿足大多數(shù)文件操作場景,本文并沒有列出如何刪除指定文件下部分文件或者目錄的操作,其實(shí)只需要重寫visitFile方法按自己的規(guī)則編寫就行。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Dubbo RPC接口的參數(shù)校驗(yàn)過程

    Dubbo RPC接口的參數(shù)校驗(yàn)過程

    文章介紹了在服務(wù)A調(diào)用服務(wù)B時(shí),如何通過添加validation="true"實(shí)現(xiàn)參數(shù)校驗(yàn),包括在pom文件、配置文件或注解@Reference中設(shè)置,并說明服務(wù)B的接口DTO可嵌套校驗(yàn),需使用@Valid和@Validated
    2025-10-10
  • java HashMap 的工作原理詳解

    java HashMap 的工作原理詳解

    本文主要介紹java HashMap 的資料,這里整理了相關(guān)資料,并詳細(xì)說明了HashMap的用法,有需要的小伙伴可以參考下
    2016-09-09
  • Java實(shí)現(xiàn)簡單的表達(dá)式計(jì)算器功能示例

    Java實(shí)現(xiàn)簡單的表達(dá)式計(jì)算器功能示例

    這篇文章主要介紹了Java實(shí)現(xiàn)簡單的表達(dá)式計(jì)算器功能,結(jié)合實(shí)例形式分析了Java針對輸入表達(dá)式的符號(hào)分解與數(shù)值運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下
    2018-06-06
  • Windows安裝Maven并配置環(huán)境變量

    Windows安裝Maven并配置環(huán)境變量

    Maven是一個(gè)基于Java的項(xiàng)目管理工具,可以管理項(xiàng)目的構(gòu)建、測試和部署,本文就來介紹一下Windows安裝Maven并配置環(huán)境變量,感興趣的可以了解一下
    2024-11-11
  • 詳解Maven多模塊打包遇到的問題解決方法

    詳解Maven多模塊打包遇到的問題解決方法

    這篇文章主要介紹了詳解Maven多模塊打包遇到的問題解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • 詳解Spring Boot中使用AOP統(tǒng)一處理Web請求日志

    詳解Spring Boot中使用AOP統(tǒng)一處理Web請求日志

    本篇文章主要介紹了詳解Spring Boot中使用AOP統(tǒng)一處理Web請求日志,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Java并發(fā)編程中高頻異常的原因,場景與解決方案全解析

    Java并發(fā)編程中高頻異常的原因,場景與解決方案全解析

    在Java并發(fā)編程中,異常處理是保障程序穩(wěn)定性的核心環(huán)節(jié),本文將深度解析4類高頻并發(fā)異常的產(chǎn)生原因、典型場景,并給出可落地的解決方案,幫你徹底避開這些坑
    2026-03-03
  • 帶你快速上手Servlet

    帶你快速上手Servlet

    這篇文章主要介紹了帶你快速上手Servlet,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-05-05
  • 使用Properties讀取配置文件的示例詳解

    使用Properties讀取配置文件的示例詳解

    開發(fā)SpringBoot項(xiàng)目時(shí),使用配置文件配置項(xiàng)目相關(guān)屬性是必不可少的,所以下文為大家準(zhǔn)備了使用Properties讀取配置文件的示例代碼,希望對大家有所幫助
    2023-06-06
  • Mybatis空值關(guān)聯(lián)的具體實(shí)現(xiàn)

    Mybatis空值關(guān)聯(lián)的具體實(shí)現(xiàn)

    在復(fù)雜的數(shù)據(jù)庫查詢中,處理空值關(guān)聯(lián)是一項(xiàng)常見的需求,本文就來介紹一下Mybatis空值關(guān)聯(lián)的具體實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07

最新評論

大丰市| 隆林| 贞丰县| 乌兰浩特市| 鄂伦春自治旗| 葫芦岛市| 昌吉市| 资阳市| 临沭县| 玉田县| 玉树县| 邹城市| 宿迁市| 腾冲县| 滨海县| 拜泉县| 韩城市| 天镇县| 岱山县| 彭山县| 曲阳县| 南雄市| 精河县| 三亚市| 孟村| 土默特右旗| 平定县| 且末县| 湟源县| 南开区| 静乐县| 晋宁县| 镇安县| 贵南县| 谷城县| 寿光市| 隆化县| 葫芦岛市| 中西区| 海晏县| 宁德市|