列举文件
更新时间: 2020-03-24
目录
本节介绍如何列举文件。
OSS文件按照字母顺序排列。您可以通过ossClient.listObjects列出存储空间下的文件。listObjects有以下三类参数格式:
- ObjectListing listObjects(String bucketName):列举存储空间下的文件。最多列举1000个文件。
- ObjectListing listObjects(String bucketName, String prefix): 列举存储空间下指定前缀的文件。最多列举1000个文件。
- ObjectListing listObjects(ListObjectsRequest listObjectsRequest):提供多种过滤功能,实现灵活的查询功能。
ObjectListing的参数如下:
参数 | 描述 | 方法 |
---|---|---|
objectSummaries | 限定返回的文件元信息 | List |
prefix | 本次查询结果的前缀 | String getPrefixes() |
bucketName | 存放这些文件的存储桶的名字 | String getBucketName() |
delimiter | 对文件名称进行分组的一个字符 | String getDelimiter() |
marker | 标明本次列举文件的起点 | String getMarker() |
maxKeys | 列举文件的最大个数 | int getMaxKeys() |
nextMarker | 下一次列举文件的起点 | String getNextMarker() |
isTruncated | 指明列举文件是否被截断。列举完没有截断,返回值为false。没列举完就有截断,返回值为true | boolean isTruncated() |
commonPrefixes | 以delimiter结尾,且有共同前缀的文件集合 | List |
简单列举文件
以下代码用于简单列举文件:
// Endpoint以华北三为例,其它Region请按实际情况填写。
String endpoint = "oss.cn-north-3.inspurcloudoss.com";
String accessKey = "<yourAccessKey>";
String secretKey = "<yourSecretKey>";
String bucketName = "<yourBucketName>";
//创建OSSClient实例
OSSClientImpl ossClient = new OSSClientImpl(endpoint, accessKey, secretKey);
//列举所有文件
ObjectListing objectListing = ossClient.listObjects(bucketName);
List<ObjectSummary> objectSummaries = objectListing.getObjectSummaries();
for (ObjectSummary objectSummary : objectSummaries) {
System.out.print("\t" + objectSummary.getKey());
}
通过前缀列举文件
以下代码用于通过前缀列举文件:
// Endpoint以华北三为例,其它Region请按实际情况填写。
String endpoint = "oss.cn-north-3.inspurcloudoss.com";
String accessKey = "<yourAccessKey>";
String secretKey = "<yourSecretKey>";
String bucketName = "<yourBucketName>";
String prefixObjectName = "*** Provide object name prefix ***";
//创建OSSClient实例
OSSClientImpl ossClient = new OSSClientImpl(endpoint, accessKey, secretKey);
//列举所有前缀为<prefixObjectName>文件
ObjectListing objectListing = ossClient.listObjects(bucketName, prefixObjectName);
List<ObjectSummary> objectSummaries = objectListing.getObjectSummaries();
for (ObjectSummary objectSummary : objectSummaries) {
System.out.print("\t" + objectSummary.getKey());
}
自定义参数列举文件
通过设置ListObjectsReques的参数可以实现灵活的查询功能。ListObjectsReques的参数如下:
参数 | 描述 | 方法 |
---|---|---|
bucketName | 存放需要列举文件的存储桶名称 | setBucketName(String bucketName) |
prefix | 限定返回的文件必须以prefix作为前缀 | setPrefix(String prefix) |
marker | 列举指定marker之后的文件 | setDelimiter(String delimiter) |
delimiter | 对文件名称进行分组的一个字符。所有名称包含指定的前缀且第一次出现delimiter字符之间的文件作为一组元素(commonPrefixes) | setMarker(String marker) |
maxKeys | 限定此次列举文件的最大个数。默认值为1000,最大值为1000 | setMaxKeys(Integer maxKeys) |
encodingType | 请求响应体中文件名称采用的编码方式,目前仅支持url | setEncodingType(String encodingType) |
以下代码用于通过ListObjectsRequest列举文件:
// Endpoint以华北三为例,其它Region请按实际情况填写。
String endpoint = "oss.cn-north-3.inspurcloudoss.com";
String accessKey = "<yourAccessKey>";
String secretKey = "<yourSecretKey>";
String bucketName = "<yourBucketName>";
String keyPrefix = "<yourkeyPrefix>";
// 设置最大个数。
final Integer maxKeys = 10;
//列举指定marker之后的文件。默认列举100个文件。
String marker = "<yourMarker>";
//设置对文件名称进行分组(分层)的一个字符,例如:aasd|sd,设置delimiter为'|',相当于aasd是sd的父目录
String delimiter = "/";
// 指定文件名称编码
String encodingType = "utf-8";
//创建OSSClient实例
OSSClientImpl ossClient = new OSSClientImpl(endpoint, accessKey, secretKey);
//最多列出maxKeys个当前桶下面前缀为prefixObjectName,开始位置为maker,分层格式为delimiter的桶,并且文件名称编码为encodingType
ObjectListing objectListing = ossClient.listObjects(bucketName, keyPrefix, marker, delimiter, maxKeys, encodingType);
List<ObjectSummary> objectSummaries = objectListing.getObjectSummaries();
for (ObjectSummary objectSummary : objectSummaries) {
System.out.print("\t" + objectSummary.getKey());
}