用JAVA代码 演示minio 如何在遇到文件夹时触发递归
时间: 2024-04-15 18:24:11 浏览: 187
当使用MinIO Java SDK时,可以使用`listObjects()`方法获取存储桶中的对象列表。然后,我们可以检查每个对象是否为文件夹,并在遇到文件夹时触发递归操作。以下是一个示例代码:
```java
import io.minio.MinioClient;
import io.minio.ObjectStat;
import io.minio.Result;
import io.minio.errors.MinioException;
import io.minio.messages.Item;
import java.io.IOException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
public class MinioRecursiveExample {
private static final String ENDPOINT = "http://localhost:9000";
private static final String ACCESS_KEY = "your-access-key";
private static final String SECRET_KEY = "your-secret-key";
public static void main(String[] args) {
try {
// 创建MinIO客户端
MinioClient minioClient = new MinioClient(ENDPOINT, ACCESS_KEY, SECRET_KEY);
String bucketName = "your-bucket-name";
String prefix = ""; // 可以指定前缀来限制递归的范围
// 获取存储桶中的对象列表
Iterable<Result<Item>> results = minioClient.listObjects(bucketName, prefix, true);
// 遍历对象列表
for (Result<Item> result : results) {
Item item = result.get();
// 检查对象是否为文件夹
if (item.isDir()) {
String folderName = item.objectName();
// 递归调用
processFolder(minioClient, bucketName, folderName);
} else {
// 处理文件
processFile(item);
}
}
} catch (MinioException | InvalidKeyException | IOException | NoSuchAlgorithmException e) {
e.printStackTrace();
}
}
private static void processFolder(MinioClient minioClient, String bucketName, String folderName)
throws IOException, NoSuchAlgorithmException, InvalidKeyException {
// 获取文件夹中的对象列表
Iterable<Result<Item>> results = minioClient.listObjects(bucketName, folderName, true);
// 遍历对象列表
for (Result<Item> result : results) {
Item item = result.get();
// 检查对象是否为文件夹
if (item.isDir()) {
String subFolderName = item.objectName();
// 递归调用
processFolder(minioClient, bucketName, subFolderName);
} else {
// 处理文件
processFile(item);
}
}
}
private static void processFile(Item item) throws IOException, NoSuchAlgorithmException, InvalidKeyException {
// 处理文件逻辑
System.out.println("Processing file: " + item.objectName());
ObjectStat stat = item.stat();
System.out.println("File size: " + stat.length());
System.out.println("Content type: " + stat.contentType());
System.out.println("Last modified: " + stat.lastModified());
}
}
```
请确保将`ENDPOINT`,`ACCESS_KEY`,`SECRET_KEY`和`your-bucket-name`替换为您自己的MinIO设置。此示例代码会遍历指定存储桶中的所有文件和文件夹,并在遇到文件夹时触发递归操作。对于每个文件,它将调用`processFile()`方法进行处理。你可以根据需要修改`processFile()`方法以执行你自己的逻辑。
阅读全文