JAVA eliminar archivo o carpeta


1. Cuatro métodos básicos de JAVA para eliminar archivos o carpetas vacías

JAVA proporciona una gran cantidad de clases para operar el flujo de E/S y adopta el modo decorador para mejorar la operación de E/S capa por capa. La clase File no solo representa un archivo sino también un directorio en JAVA. El archivo puede crear, eliminar y renombrar archivos y directorios. Sin embargo, las funciones de la clase File son relativamente limitadas.El paquete java.nio.file se ha agregado en JAVA 7, y se han agregado nuevas clases como Path, Paths y Files para compensar la escasez.

delete () de la clase de archivo

El método de eliminación de la clase File se utiliza para eliminar un archivo o directorio y devuelve verdadero si la eliminación se realiza correctamente o falso en caso contrario. No puede decir si el archivo devuelve falso porque no existe, o falso si la eliminación del archivo falló ( el archivo está en uso ).

deleteOnExit() de la clase File

El método deleteOnExit() de la clase File no devuelve ninguna información, por lo que no podemos juzgar el estado del archivo (si está eliminado), por lo que debemos evitar usar este método.

eliminar (ruta de acceso) de la clase de archivos

La clase Files es una clase de herramienta introducida por JAVA 7 para operar archivos. El método Files.delete no devolverá ninguna información si el archivo se elimina con éxito. Si el archivo no existe, se lanzará una java.nio.file.NoSuchFileException Si la operación se elimina es un directorio no vacío, se generará una java.nio.file.DirectoryNotEmptyException. Uso recomendado

deleteIfExists(Path path) de la clase Files

El método Files.deleteIfExists devuelve verdadero si el archivo se elimina correctamente o falso si el archivo no existe. Si el directorio eliminado no está vacío, se genera java.nio.file.DirectoryNotEmptyException. Uso recomendado

Resumir

Se puede ver en el resumen anterior que cuando el método IO tradicional elimina un archivo o una carpeta, cuando la eliminación falla, se devuelve como máximo un falso. El motivo específico de la falla de eliminación no se puede descubrir a través de este falso, ¿se debe a que el archivo en sí no tiene una falla de eliminación? ¿O se está utilizando el archivo y la eliminación falló? El método NIO hace un mejor trabajo en este punto.Hay valores de retorno específicos o información de excepción para el éxito o fracaso de la eliminación, lo que nos ayuda a manejar mejor las excepciones en el programa al eliminar archivos o carpetas.

2. Cómo eliminar todo el directorio o algunos archivos en el directorio

Al demostrar cómo eliminar un directorio completo o algunos archivos en un directorio, primero hablemos sobre el método walkFileTree y la interfaz FileVisitor en Files .

Recorra archivos y directorios con FileVistor

En la operación JAVA IO tradicional, es necesario que el programa recorra todos los archivos y subdirectorios bajo el directorio especificado, y generalmente se usa el recorrido recursivo.Este método no solo es complicado sino que también tiene poca flexibilidad. Por lo tanto, JAVA 7 proporciona la clase de herramienta Archivos para ayudarnos a facilitar mejor los archivos y subdirectorios. La clase Files proporciona el método walkFileTree para recorrer archivos y subdirectorios.
inserte la descripción de la imagen aquí
Ambos métodos requieren el parámetro FileVistor , FileVisitor representa al visitante del archivo, el primer parámetro Path representa la ruta del archivo para comenzar a recorrer y el parámetro int representa el número de capas atravesadas. El método walkFileTree recorrerá automáticamente todos los archivos y subdirectorios en Ruta. Atravesar archivos y subdirectorios activará el método correspondiente en FileVisitor .
En FileVisitor se definen cuatro métodos :

//访问子目录之前触发该方法
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;

Los cuatro métodos anteriores devolverán un objeto FileVisitResult para representar el comportamiento después de la visita. FileVisitResult define cuatro comportamientos:

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

    private FileVisitResult() {
    
    
    }
}

En la programación real, puede implementar la suya propia heredando SimpleFileVisitor文件访问器 o reescribir los métodos en la clase SimpleFileVisitor para satisfacer sus propias necesidades.

Files.walkFileTree elimina todos los archivos en la carpeta especificada (código de demostración)

La clase de herramienta proporcionada es para eliminar todos los subdirectorios o archivos del archivo o directorio especificado. Si solo se va a eliminar una parte del archivo, anule la regla del método visitFile . el código se muestra a continuación:

/**
 * @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();
        }
    }
}

Resumir

Archivos proporciona una gran cantidad de métodos de operación de archivos, que pueden cumplir con la mayoría de los escenarios de operación de archivos. Este artículo no enumera cómo eliminar algunos archivos o directorios en el archivo especificado. De hecho, solo necesita volver a escribir el método visitFile para escribir de acuerdo con tus propias reglas. Si tiene alguna pregunta o mejor comentario, por favor deje un mensaje.

Supongo que te gusta

Origin blog.csdn.net/qq_43600166/article/details/125835838
Recomendado
Clasificación