Java调用Oss JDk实现删除指定目录下的所有文件

 更新时间:2025年03月18日 09:10:26   作者:APP 肖提莫  
这篇文章主要为大家详细介绍了Java如何调用Oss JDk实现删除指定目录下的所有文件功能,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下

1、引入依赖

<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.16.1</version>
</dependency>

2、方法

/**
	 * 删除指定前缀或目录下的多个文件
	 *
	 * @param prefix 删除目录
	 */
	public void deletePathFileList(String prefix) {
		OSS ossClient = null;
		try {
            //封装创建Oss实例
			CredentialsProvider credentialsProvider = new DefaultCredentialProvider(access_key, secret_key);
			ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
			clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
			ossClient = OSSClientBuilder.create().endpoint(endpoint).credentialsProvider(credentialsProvider).clientConfiguration(clientBuilderConfiguration).region(region).build();
            // 列举所有包含指定前缀的文件并删除。
			String nextMarker = null;
			ObjectListing objectListing;
			do {
				ListObjectsRequest listObjectsRequest = new ListObjectsRequest(bucket).withPrefix(prefix).withMarker(nextMarker);
 
				objectListing = ossClient.listObjects(listObjectsRequest);
				if (!objectListing.getObjectSummaries().isEmpty()) {
					List<String> keys = new ArrayList<>();
					for (OSSObjectSummary s : objectListing.getObjectSummaries()) {
						keys.add(s.getKey());
					}
					DeleteObjectsRequest deleteObjectsRequest = new DeleteObjectsRequest(bucket).withKeys(keys).withEncodingType("url");
					DeleteObjectsResult deleteObjectsResult = ossClient.deleteObjects(deleteObjectsRequest);
					List<String> deletedObjects = deleteObjectsResult.getDeletedObjects();
					for (String obj : deletedObjects) {
						String deleteObj = URLDecoder.decode(obj, "UTF-8");
						System.out.println(deleteObj);
					}
				}
				nextMarker = objectListing.getNextMarker();
			} while (objectListing.isTruncated());
		} catch (Exception e) {
			log.error("阿里云删除指定前缀或目录下的多个文件异常:{}", e.getMessage());
		} finally {
			if (ossClient != null) {
				ossClient.shutdown();
			}
		}
	}

3、方法补充

下面小编为大家整理了Java删除文件的所有方法,有需要的可以参考下

1.使用FileUtils类

来自 Apache Commons IO的FileUtils类提供了几个方便的文件操作实用程序。您可以使用该FileUtils.cleanDirectory()方法递归删除目录中的所有文件和子目录,而不删除目录本身。

import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException; 
public class Main {
    public static void main(String[] args) throws IOException {
        File directory = new File("/path/to/dir");
        FileUtils.cleanDirectory(directory);
    }
}

要递归删除目录及其中的所有内容,您可以使用该FileUtils.deleteDirectory()方法。

import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException; 
public class Main {
    public static void main(String[] args) throws IOException {
        File directory = new File("/path/to/dir");
        FileUtils.deleteDirectory(directory);
    }
}

或者,您可以使用该FileUtils.forceDelete()方法删除一个目录和所有子目录。

import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
public class Main {
    public static void main(String[] args) throws IOException {
        File directory = new File("/path/to/dir");
        FileUtils.forceDelete(directory);
    }
}

2.使用File.delete()方法

该File.delete()方法删除由指定路径名表示的文件或目录。有许多方法可以有条件地删除使用它的目录中的文件和子目录。

例如,以下解决方案仅删除主目录中的文件,所有子目录保持不变。

import java.io.File;
import java.util.Objects; 
public class Main {
    public static void main(String[] args) {
        File directory = new File("/path/to/dir"); 
        for (File file: Objects.requireNonNull(directory.listFiles())) {
            if (!file.isDirectory()) {
                file.delete();
            }
        }
    }
}

如果您使用 Java 8 或更高版本,则可以使用:

import java.io.File;
import java.util.Arrays;
import java.util.Objects;
import java.util.function.Predicate; 
public class Main {
    public static void deleteDirectory(File directory) {
        Arrays.stream(Objects.requireNonNull(directory.listFiles()))
                .filter(Predicate.not(File::isDirectory))
                .forEach(File::delete);
    } 
    public static void main(String[] args) {
        File directory = new File("/path/to/dir");
        deleteDirectory(directory);
    }
}

您可以轻松扩展解决方案以递归删除目录中的所有文件和子目录。请注意,File.delete()当且仅当目录为空时,您可以使用该方法删除目录。

import java.io.File;
import java.util.Objects; 
public class Main {
    public static void deleteDirectory(File directory) {
        for (File file: Objects.requireNonNull(directory.listFiles())) {
            if (file.isDirectory()) {
                deleteDirectory(file);
            } else {
                file.delete();
            }
        }
    } 
    public static void main(String[] args) {
        File directory = new File("/path/to/dir");
        deleteDirectory(directory);
    }
}

这是使用 Stream API 的版本。它利用该Files.walk()方法并删除目录中的所有文件和子目录以及目录本身。

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Comparator; 
public class Main {
    public static void deleteDirectory(Path directory) throws IOException {
        Files.walk(directory)
                .sorted(Comparator.reverseOrder())
                .map(Path::toFile)
                .forEach(File::delete);
    } 
    public static void main(String[] args) throws IOException {
        Path directory = Path.of("/path/to/dir");
        deleteDirectory(directory);
    }
}

如果您需要从目录及其所有子目录中删除“仅文件”,您可以执行以下操作:

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path; 
public class Main {
    public static void deleteDirectory(File directory) throws IOException {
        Files.walk(directory.toPath())
                .filter(Files::isRegularFile)
                .map(Path::toFile)
                .forEach(File::delete);
    } 
    public static void main(String[] args) throws IOException {
        File directory = new File("/path/to/dir");
        deleteDirectory(directory);
    }
}

到此这篇关于Java调用Oss JDk实现删除指定目录下的所有文件的文章就介绍到这了,更多相关Java删除指定目录下文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JPA之EntityManager踩坑及解决:更改PersistenceContext

    JPA之EntityManager踩坑及解决:更改PersistenceContext

    这篇文章主要介绍了JPA之EntityManager踩坑及解决:更改PersistenceContext方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • 详解Java类库的概念以及import的使用方法

    详解Java类库的概念以及import的使用方法

    这篇文章主要介绍了详解Java类库的概念以及import的使用方法,是Java入门学习中的基础知识,需要的朋友可以参考下
    2015-09-09
  • Arrays.sort如何实现降序排序

    Arrays.sort如何实现降序排序

    这篇文章主要介绍了Arrays.sort如何实现降序排序问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • 浅谈Springboot2.0防止XSS攻击的几种方式

    浅谈Springboot2.0防止XSS攻击的几种方式

    本文主要介绍了Springboot2.0防止XSS攻击的几种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • Java实现分布式系统限流

    Java实现分布式系统限流

    这篇文章主要为大家详细介绍了Java实现分布式系统限流,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • Java ConcurrentHashMap的源码分析详解

    Java ConcurrentHashMap的源码分析详解

    ConcurrentHashMap(CHM)是日常开发中使用频率非常高的一种数据结构,想对于普通的HashMap,CHM提供了线程安全的读写,CHM里面使用了许多比较精妙的优化&操作。本文主要对CHM的整体结构、初始化,查找,插入等做分析
    2023-03-03
  • SpringBoot整合mybatis常见问题(小结)

    SpringBoot整合mybatis常见问题(小结)

    这篇文章主要介绍了SpringBoot整合mybatis常见问题(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • java实现文件上传和下载

    java实现文件上传和下载

    这篇文章主要为大家详细介绍了java实现文件上传和下载,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • datax-web在windows环境idea中模块化打包部署操作步骤

    datax-web在windows环境idea中模块化打包部署操作步骤

    这篇文章主要介绍了datax-web在windows环境idea中模块化打包部署操作步骤,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-05-05
  • Java在web页面上的编码解码处理及中文URL乱码解决

    Java在web页面上的编码解码处理及中文URL乱码解决

    这篇文章主要介绍了Java在web页面上的编码解码处理及中文URL乱码解决,文中所介绍的两种使用过滤器解决中文链接乱码的方法非常有效,需要的朋友可以参考下
    2016-02-02

最新评论