java怎么查询minio桶中文件夹中下的文件列表
Iterable<Result> results = minioClient.listObjects(ListObjectsArgs.builder().bucket(minioConfig.getBucketName()).build());
可以通过设置 prefix 和 recursive 参数来实现。其中,prefix 参数表示要查询的文件夹路径,recursive 参数表示是否递归查询子文件夹中的文件列表。
code如下:
import io.minio.ListObjectsArgs;
import io.minio.MinioClient;
import io.minio.Result;
import io.minio.messages.Item;
import java.util.Iterator;
public class MinioExample {
public static void main(String[] args) throws Exception {
// 初始化 Minio 客户端
MinioClient minioClient = MinioClient.builder()
.endpoint("http://localhost:9000")
.credentials("ACCESS_KEY", "SECRET_KEY")
.build();
// 查询文件夹中的文件列表
Iterable<Result<Item>> results = minioClient.listObjects(
ListObjectsArgs.builder()
.bucket("my-bucket")
.prefix("path/to/folder/")
.recursive(true)
.build());
// 遍历文件列表
Iterator<Result<Item>> iterator = results.iterator();
while (iterator.hasNext()) {
Item item = iterator.next().get();
System.out.println(item.objectName());
}
}
}
MinIO 是一款高性能、分布式的对象存储系统. 它是一款软件产品, 可以100%的运行在标准硬件。即X86等低成本机器也能够很好的运行MinIO。
MinIO与传统的存储和其他的对象存储不同的是:它一开始就针对性能要求更高的私有云标准进行软件架构设计。因为MinIO一开始就只为对象存储而设计。所以他采用了更易用的方式进行设计,它能实现对象存储所需要的全部功能,在性能上也更加强劲,它不会为了更多的业务功能而妥协,失去MinIO的易用性、高效性。 这样的结果所带来的好处是:它能够更简单的实现局有弹性伸缩能力的原生对象存储服务。
MinIO在传统对象存储用例(例如辅助存储,灾难恢复和归档)方面表现出色。同时,它在机器学习、大数据、私有云、混合云等方面的存储技术上也独树一帜。当然,也不排除数据分析、高性能应用负载、原生云的支持。
在中国:阿里巴巴、腾讯、百度、中国联通、华为、中国移动等等9000多家企业也都在使用MinIO产品
http://www.minio.org.cn/overview.shtml#
嗯,看起来很牛逼,那我们部署一下,我这边就先用windows简单搞一下吧,这是官网链接,支持Docker,Kubernetes,Windows,Mac,选择自己合适的版本下载。
http://www.minio.org.cn/index.shtml
要使用Java查询Minio桶中文件夹下的文件列表,可以使用MinIO Java SDK提供的列表对象的方法listObjects(),该方法可以返回指定桶中指定前缀的所有对象或文件列表。具体实现步骤如下:
io.minio minio 8.0.3
MinioClient minioClient = MinioClient.builder() .endpoint("https://play.min.io") .credentials("Q3AM3UQ867SPQQA43P2F", "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG") .build();
其中,endpoint为MinIO服务的地址,credentials为访问密钥,需要替换为自己的。
Iterable> objectList = minioClient.listObjects(ListObjectsArgs.builder() .bucket("mybucket") .prefix("myfolder/") .recursive(true) // 递归查询 .build());
其中,bucket指定要查询的桶,prefix指定要查询的文件夹前缀,recursive指定是否递归查询。
for (Result result : objectList) { Item item = result.get(); System.out.println(item.objectName()); }
完整代码示例:
import io.minio.ListObjectsArgs; import io.minio.MinioClient; import io.minio.Result; import io.minio.messages.Item;
public class MinioFileListDemo {
public static void main(String[] args) {
try {
MinioClient minioClient = MinioClient.builder()
.endpoint("https://play.min.io")
.credentials("Q3AM3UQ867SPQQA43P2F", "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG")
.build();
Iterable<Result<Item>> objectList = minioClient.listObjects(ListObjectsArgs.builder()
.bucket("mybucket")
.prefix("myfolder/")
.recursive(true)
.build());
System.out.println("File list in bucket 'mybucket', folder 'myfolder':");
for (Result<Item> result : objectList) {
Item item = result.get();
System.out.println(item.objectName());
}
} catch (Exception e) {
System.out.println("Error occurred: " + e.getMessage());
}
}
}
同时需要注意,要查询的文件夹下如果有大量文件时,该方法可能会返回分多个请求的多个分页结果,需要使用返回的ContinuationToken进行分页处理。这部分代码可以参考MinIO Java SDK官方文档的说明。
重点就是文件夹路径用 prefix 即可.里面加入你的minio中的文件夹路径