欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

一、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()方法并不會返回任何信息,以至于我們無法判斷文件狀態(tài)(是否被刪除),因此我們應該避免使用這個方法。

Files類的delete(Path path)

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

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

Files類的deleteIfExists(Path path)

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

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

總結(jié):

  • 由上面的總結(jié)可以看出,傳統(tǒng)IO方法刪除文件或文件夾,在刪除失敗的時候,最多返回一個false。
  • 通過這個false無法發(fā)掘刪除失敗的具體原因,是因為文件本身不存在刪除失???還是文件正在被使用而刪除失???
  • NIO 的方法在這一點上,就做的比較好,刪除成功或失敗都有具體的返回值或者異常信息,這樣有利于我們在刪除文件或文件夾的時候更好的做程序的異常處理。

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

在演示如何刪除整個目錄或者目錄中部分文件時,讓我們先談論Files中的walkFileTree方法和FileVisitor接口。

使用FileVistor遍歷文件和目錄

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

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

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

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

walkFileTree方法會自動遍歷Path路徑下的所有文件和子目錄。

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

FileVisitor中定義了四個方法:

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

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

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

    private FileVisitResult() {
    }
}

在實際編程運用中,可以通過繼承SimpleFileVisitor來實現(xiàn)自己的文件訪問器,或者重寫SimpleFileVisitor類中的方法來實現(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ù)文件操作場景,本文并沒有列出如何刪除指定文件下部分文件或者目錄的操作,其實只需要重寫visitFile方法按自己的規(guī)則編寫就行。

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

相關文章

  • CountDownLatch和Atomic原子操作類源碼解析

    CountDownLatch和Atomic原子操作類源碼解析

    這篇文章主要為大家介紹了CountDownLatch和Atomic原子操作類的源碼解析以及理解應用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-03-03
  • 詳解java中Reference的實現(xiàn)與相應的執(zhí)行過程

    詳解java中Reference的實現(xiàn)與相應的執(zhí)行過程

    不知道大家知不知道特殊的reference對象都是被jvm專門處理的,所以這篇文章就相應的工作流程和referencequeue之間的協(xié)作進行梳理.有需要的朋友們可以參考借鑒。
    2016-09-09
  • Java項目實現(xiàn)尋找迷宮出路

    Java項目實現(xiàn)尋找迷宮出路

    這篇文章主要為大家詳細介紹了Java項目實現(xiàn)尋找迷宮出路,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • java線程池參數(shù)舉例詳解(附詳細代碼)

    java線程池參數(shù)舉例詳解(附詳細代碼)

    這篇文章主要介紹了Java線程池的工作原理、構(gòu)造方法和關鍵參數(shù),它還提供了線程池的工作流程、常用線程池實現(xiàn)及參數(shù)優(yōu)化建議,幫助開發(fā)者更好地管理和優(yōu)化線程池,需要的朋友可以參考下
    2025-02-02
  • MyBatis-Plus 與Druid 數(shù)據(jù)源操作

    MyBatis-Plus 與Druid 數(shù)據(jù)源操作

    SpringBoot框架集成MyBatis-Plus和Druid數(shù)據(jù)源,簡化了數(shù)據(jù)操作與監(jiān)控,MyBatis-Plus作為MyBatis的增強工具,自動實現(xiàn)CRUD操作,減少手寫SQL,提供分頁、邏輯刪除等功能,本文介紹MyBatis-Plus & Druid 數(shù)據(jù)源總結(jié),感興趣的朋友一起看看吧
    2024-09-09
  • 詳解Java中字符串緩沖區(qū)StringBuffer類的使用

    詳解Java中字符串緩沖區(qū)StringBuffer類的使用

    StringBuffer與String類似,只不過StringBuffer在進行字符串處理時不生成新的對象,下面我們就來詳解Java中字符串緩沖區(qū)StringBuffer類的使用:
    2016-06-06
  • Spring boot jpa 刪除數(shù)據(jù)和事務管理的問題實例詳解

    Spring boot jpa 刪除數(shù)據(jù)和事務管理的問題實例詳解

    這篇文章主要介紹了Spring boot jpa 刪除數(shù)據(jù)和事務管理的問題實例詳解,涉及業(yè)務場景的一些知識和遇到的的問題,需要的朋友可以參考。
    2017-09-09
  • spring mvc實現(xiàn)登錄賬號單瀏覽器登錄

    spring mvc實現(xiàn)登錄賬號單瀏覽器登錄

    這篇文章主要為大家詳細介紹了spring mvc實現(xiàn)登錄賬號單瀏覽器登錄,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • 解決Eclipse打開.java文件異常,提示用系統(tǒng)工具打開的問題

    解決Eclipse打開.java文件異常,提示用系統(tǒng)工具打開的問題

    這篇文章主要介紹了解決Eclipse打開.java文件異常,提示用系統(tǒng)工具打開的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • Struts2訪問Servlet的三種方式

    Struts2訪問Servlet的三種方式

    這篇文章主要介紹了Struts2訪問Servlet的三種方式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-06-06

最新評論